Pointer in C?
Hallo,
Ich habe diesen Code gefunden:
Erst wird einer Variable ein Wert zugeteilt.
Dann wird die Adresse der Variable an eine Funktion übergeben.
In dieser Funktion wird die Adresse der Variable einem Pointer zugewiesen.
Dann wird der Wert der Adresse auf die der Pointer zeigt um 10 erhöht.
DANACH soll die Funktion den Wert 0 wieder zurückgeben.
Warum wurde damit nicht die Variable Brief erst um 10 erhöht und ihr dann der Wert 0 zugeteilt?
Diese Funktion soll schließlich den Wert den sie durch einen Parameter erhalten hat entsprechend verändert wieder an den selben Parameter zurückgeben wenn sie endet oder nicht?
Hier der Code:
#include <stdio.h>
int briefkasten(int *pointer){
*pointer += 10;
return 0;
}
int main(){
int brief = 100;
briefkasten(&brief);
printf("%d\n", brief);
return 0;
}
3 Antworten
Naja. Also die Funktion briefkasten gibt einen Wert zurück. Dieser Wert muss allerdings einer Variablen zugewiesen werden.
Wenn du
brief = briefkasten();
aufrufst, wird der Wert, den die Funktion briefkasten zurückliefert in der Variablen brief gespeichert.
wenn du nur
briefkasten();
aufrufst, wird auch ein Wert zurückgegeben (also die 0), aber dieser Wert verpufft sozusagen, weil keine Zuweisung stattfindet.
Du kannst also beide Möglichkeiten nutzen. Du kannst entweder die Adresse reingeben und den Wert innerhalb der Funktion ändern. Oder du kannst ein Konstrukt nutzen wie
brief = briefkasten();
welches den Wert durch den Rückgabewert ändert. Es gibt andere Programmiersprachen, wie z.B. Java, die auf Pointer verzichten, da kann man beispw. die Adresse einer Variablen nicht einfach übergeben und die Variable dann innerhalb der Funktion ändern. Dort geht nur
brief = briefkasten();
sowas. C bietet dir also mehrere Möglichkeiten, die allerdings auch dazu führen können, dass der Code eben schwerer verständlich ist oder Fehler eher auftauchen. :)
int res=briefkasten(&brief);
printf("res: %d, brief: %d\n",res, brief);
Du scheinst ganz grundlegende Verständnisprobleme zu haben, wie Funktionsaufrufe funktionieren.
Vergleiche:
y=2x
y wird der Wert in Abhängigkerit von x zugewiesern, schreiben wir es um: f(x)=2x.
int f(int x){
return 2*x;
}
[main]
int y=f(12);
der Rückgabewert der Briefkastenfunktion wird nie genutzt