016
18.12.2003, 02:39 Uhr
0xdeadbeef
Gott (Operator)
|
Klar. Es ist allerdings ein bisschen abstrakt. Wenn du einen Integer anforderst, wird der irgendwo in den Speicher geschrieben. Um den Integer zu ändern, wird an dieselbe Stelle im Speicher ein anderer Wert geschrieben. Das ist das ene. Das andere ist, dass C nur ein call-by-value kennt. Das bedeutet, dass, wenn du einen Parameter an eine Funktion übergibst, dessen Wert an eine andere Stelle im Speicher kopiert und weiterverwendet wird. Wenn der Wert innerhalb der Funktion verwendet wird, ändert sich für den Wert in der aufrufenden Funktion nichts. Nimm zum Beispiel das hier:
C++: |
void quadratiert_x_nicht(int x) { x = x*x; }
|
Diese Funktion verbraucht Rechenzeit, weiter nichts. Das bedeutet, um den Wert einer Variable in der aufrufenden Funktion zu verändern, brauchst du die Adresse der ursprünglichen Variablen, und diese kriegst du mit dem &-Operator. &punkte1 ist die Adresse, an der punkte1 im Speicher steht. Dementsprechend braucht fscanf, weil es den Wert verändern soll, die Adresse, printf aber nur den Wert. Deswegen musst du bei fscanf & benutzen, bei printf aber nicht. Eine andere Sache ist es bei Strings, weil Strings ein Speicherbereich beliebiger Länge sind und von Haus aus immer die Adresse übergeben wird. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |