Aufgabe: Zeiger von Call by Value auf Call by Reference



  • Hallo,

    ich belege einen Kurs zum C-Lernen.
    Dort ist folgende Aufgabe gestellt worden:

    Schreiben Sie das Programm von Aufgabe 3 von Call by Value auf Call by Reference um.

    Call by Value (Kopie) und Call by Reference (Direkte Übergabe) ist mir klar. Aber ich habe leider keinen Ansatz, folgendes simples Beispiel auf Call by Reference umzuschreiben:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct{ 
    	int x;
    	int y;
    }Punkt;
    
    struct Anker{ Punkt *ds; };
    
    void speicher( struct Anker nxt ) {
    	nxt.ds = malloc(sizeof(Punkt));
    	if( nxt.ds != NULL) {
    		printf("Erfolgreich\n");
    		nxt.ds->x = 2;
    		nxt.ds->y = 4;
    		printf("x:%d\n",nxt.ds->x);
    		printf("y:%d\n",nxt.ds->y);
    	} else {
    		printf("Fehler");
    	}
    }
    
    int main() {
    	struct Anker vAnker; vAnker.ds = NULL;
    	speicher(vAnker);
    	printf("Hauptprogramm:\n");
    	if (vAnker.ds != NULL) {
    		printf("x:%d\n",vAnker.ds->x);
    		printf("y:%d\n",vAnker.ds->y);
    	} else {
    		printf("Keine Adresse\n");
    	}
    	return 0;
    }
    

    Hinter dem Programm ist nicht wirklicher Sinn, sondern nur der Beginn von Zeigern usw.

    Vielen Dank für eure Hilfe!



  • Wo genau liegt denn dein Problem? Statt der kompletten Instanz übergibst du einfach einen Zeiger darauf.



  • Der Schlüssel sind die beiden Operatoren "*" und "&". Da dir call-by-reference und call-by-value klar sind, liegen deine Schwierigkeiten sicher nur im syntaktischen Bereich.

    Kleines Beispiel:

    void myFunc(int *iInt) {  //es soll ein Zeiger auf int übergeben werden
      *iInt=1;  //die Adresse, auf die iInt zeigt, wird mit dem Wert 1 gefüllt.
    }
    
    int main() {
      int i=0;
      printf("i hat den Wert %i",i);
      myFunc(&i);  //der Adressoperator übergibt die Adresse von i an myFunc
      printf("i hat den Wert %i",i);
    }
    

Anmelden zum Antworten