On Sun, 18 May 2003, Bernhard Walle wrote:
On Sun, 18 May 2003 at 13:31 (+0200), Daniel Feist wrote:
Hallo, Ich habe eine Frage zum Adressoperator in C.: Beispiel:
#include
/* Bibliothek einbinden */ int main() { int i; /* Variable "i" festlegen */
printf("Bitte geben sie eine Zahl ein: ");
scanf("%d", &i); /* Standarteingebe stdin mit "%d" festlegen und Variabele &i als Adressoperator bestimmen */
printf("Die Zahl, die sie eingegeben haben ist: "%d", i); /* Ich verstehe nicht, warum statt '&i' nur 'i' dasteht, obwohl der die Standarteingabe noch in "&i" abgeleg ist.
return 0; }
Bei scanf() wird was eingelesen, d. h. scanf will den Wert von i veraendern. Dies geht nur, wenn scanf() die Adresse von i uebergeben wird.
Die Adresse von 'i' wird ja einfach willkürlich vom Computer festgelegt. Wenn ich das richtig verstanden habe, wird durch &(Adressoperator) die Adresse festgelegt!
Man kann sich das so vorstellen: i uebergibt einer Funktion die Zahl,&i uebergibt einen Zettel, auf der die Zahl draufsteht. Wenn Du einen Zettel uebergibst, kann die Funktion einen Radiergummi nehmen und was anderen auf den Zettel schreiben. Dann hat das Hauptprogramm, wo die Funktion aufgerufen wird, den anderen Wert in i stehen. Wenn Du aber nur i uebergibst, kann i nicht veraendert werden. printf() muss nichts veraendern, es braucht einfach nur den Wert.
printf("%d\n", 5); geht, es wird einfach 5 ausgegeben. scanf("%d", 5) geht nicht, wie soll 5 denn veraendert werden. &5 geht natuerlich auch nicht, weil man von einer Zahlenkonstante keine Adresse uebergeben kann.
Hä?!? Wie 'i' übergibt einer Funktion die Zahl,... das ist mir nicht klar! Aber sonst hast du es gut beschrieben.
Trotzdem rate ich Dir dringend, ein gutes C-Buch zu kaufen, in dem sowas erklaert wird.
Ich lese ja momentan auf www.pronix.de eine Einführung in C - Aber ich werde mir sowiso ein Buch kaufen - kennst du ein gute?
Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Gruss Daniel -- clusterix.perl@gmx.de