Werteparam., Variablenparam... < Sonstige < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:29 Mo 27.11.2006 | Autor: | Teufel |
Hallo!
Wir haben letztens mit einem Haufen Theorie angefangen. Es ging um Werteparameter und Variablenparameter, formale und aktuelle Parameter (in Unterprogrammen).
Ich glaube, dass ich das mit formalen und aktuellen Parametern verstanden habe (kann trotzdem noch bitte jemand das grundlegende ganz kurz zusammenfassen?). Formale sind nur Platzhalten und die Aktuellen, mit denen diese Plätze belegt werden, oder?
Aber was sind nun Werte- und Variablenparameter? Ich weiß nur, dass bei Werteparametern die Werte nicht verändert werden und dass die Unterprogramme dort mit Kopien arbeiten (oder?). Bei den aktuellen Parametern aber werden auch Sachen geändert irgendwie...
Danke für Hilfe.
|
|
|
|
Hallo,
> Formale sind nur Platzhalten und die Aktuellen, mit denen diese Plätze belegt werden, oder?
Ja, so kann man das ausdrücken. Beim Aufruf eines Unterprogramms (oder einer Funktion) übernimmt der formale Parameter für die Dauer dieses Unterprogramms den Wert des aktuellen Parameters.
> Ich weiß nur, dass bei Werteparametern die Werte nicht verändert werden und dass die Unterprogramme dort mit Kopien arbeiten (oder?). Bei den aktuellen Parametern aber werden auch Sachen geändert irgendwie...
Bei der Arbeit mit Werteparametern ("call-by-value") wird tatsächlich eine Kopie des Parameters angelegt, so dass die Werte der Variablen im Hauptprogramm nicht verändert werden. Variablenparameter sind aber Parameter, die das Unterprogramm direkt bearbeitet, weil es ja die Adressen der "Originale" übergeben bekommt. Dies ist sehr nützlich, birgt aber Tücken, wenn man es beim Programmieren vergisst, weil man versehentlich ungewünschte Veränderungen der Variablenwerte bewirken kann.
Beispiel:
quadrat(x) sein eine Funktion, die das Quadrat einer Zahl liefert. Sie kann so aussehen:
quadrat(x){
x=x*x;
return x;
}
Falls sie mit einem Wertparameter arbeitet, dann bekommt sie einen Wert übergeben, speichert diesen in x, speichert dessen Quadrat in x und gibt x zurück. Da hier nur der Wert übergeben wurde, hat die Variable im Hauptprogramm, deren Quadrat du berechnest, noch denselben Wert.
Falls die Funktion aber mit einem Variablenparameter arbeitet, dann wirkt sich jede Veränderung von x auf die Variable im Hauptprogramm aus (auch wenn es ungewollt ist!). Das bedeutet, dass sich der Wert dieser Variablen durch den Aufruf der Funktion quadrat plötzlich ändert.
Ich hoffe, diese Beschreibung war einigermaßen verständlich...
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:30 Di 28.11.2006 | Autor: | Teufel |
Ok, ich danke dir erstmal :)
Also das heißt, wenn ich bei der quadrat-Funktion mit einem Variablenparameter arbeite und ich die Funktion z.B. öfter hintereinander ausführen würde, würde das x immer größer werden?
|
|
|
|
|
Hallo,
du darfst dich nicht an den Variablennamen klammern. Wenn du in diesem Fall quadrat mehrmals auf dieselbe Variable deines Hauptprogramms anwendest, dann wird diese Variable (unabhängig davon, wie sie heißt) immer größer.
Angenommen, dein Programm sieht so aus:
Knödel = 4;
Hackfleisch = 3;
KnödelQuadrat = quadrat(Knödel);
HackfleischQuadrat = quadrat(Hackfleisch);
KnödelQuadrat2 = quadrat(Knödel);
HackfleischQuadrat2 = quadrat(Hackfleisch);
Nach Ablauf des Programms hast du folgende Variablenbelegungen:
Knödel = 256;
KnödelQuadrat = 16;
KnödelQuadrat2 = 256;
Hackfleisch = 81;
HackfleischQuadrat = 9;
HackfleischQuadrat2 = 81;
Du kannst es ja einmal durchsimulieren.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:16 Di 28.11.2006 | Autor: | Teufel |
Ok, danke nochmal für die Erklärungen :) hab's nun verstanden. Aber der ganze Quelltext hat mir nun Hunger gemacht ;)
|
|
|
|