Einzelnen Beitrag anzeigen

Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#8

Re: Variablenübergabe - erklärt mir das einer?

  Alt 25. Nov 2003, 19:14
Hallo!

@fkerber: call by reference ist Dir schon bekannt, oder? Und der Gebrauch von "VAR"?

So, zur Erklärung. Dazu erst einmal noch mal aus meinem letzten Posting:
Zitat von Peter Lustig:
Zu Deiner letzten Frage muss ich dann doch nochmal was weiter ausholen und meine vorigen Erklärungen ergänzen. Also noch einmal zu "call by reference": Wenn Du schreibst, der Wert von p an c überwiesen wird, ist das nicht ganz korrekt. (Kannste ja auch nicht wissen.) Denn im Grunde genommen ist p nur ein Zweitname für c.
Eine Variable ist ja eigentlich nur ein Speicherbereich. Und mit "c" sagst Du dem Compiler nur, auf welchen Bereich im Speicher er zugreifen soll. Wenn Du nun eine Variable durch "call by reference" übergibst (z.B. als p), dann greifst Du mit "p" auf denselben Speicherbereich zu wie mit "c". Der Wert von p wird also nicht an c "überwiesen", sondern der Wert p ist der Wert von c.
So. Hier geht es geanuso. Sagen wir, "zahl" zeigt im Hauptprogramm auf den Speicherbereich Nr. 42. Dann bewirkt das "VAR" in der Parameter-Übergabe, dass "u_zahl" im Unterpogramm ebenfalls auf Speicherbereich Nr. 42 zeigt. Damit wird jede Aktion, die an "u_zahl" vorgenommen wird, auf dem Speicherbereich 42 vorgenommen.
Da jedoch im Hauptprogramm "zahl" ja immer noch auf Speicherbereich 42 zugreift, ändere ich mit dem Unterprogramm den Inhalt von "zahl". Wie gesagt: "u_zahl" ist nur ein Zweitname für den Speicherbereich von "zahl".

Wenn Du das "VAR" nicht im Parameter hättest, würde das nicht funtionieren. Dann würde für "u_zahl" im Unterprogramm ein eigener Speicherbereich (z.B. Nr. 43) eingerichtet und der Wert von "zahl" in diesen Speicherbereich kopiert. Da jedoch "u_zahl" jetzt mit Speicherbereich 43 arbeitet, "zahl" aber mit 42, würden die Änderungen auf "zahl" keine Auswirkung haben. Wie gesagt: nur wenn das "VAR" nicht dort steht. Das wäre dann "call by value", weil der Wert kopiert wird.

MfG
Peter

MfG
Peter
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat