Call by Value/Reference
-
Hallo zusammen,
ich habe eine kurze Frage. Wenn ich eine Funktion habe, die keinen Wert zurückgibt (Prozedur) und ich Parameter übergebe, spricht man dann von "Call by Value"??Demgegenüber spricht man von "Call by Reference" wenn ich eine Funkion habe, der ich ebenfalls Parameter übergebe, aber diese mir etwas zurückgibt??
Habe ich das richtig verstanden?
Vielen Dank
lg, freakC++Edit: Ich glaube das oben genannte ist Schwachsinn (ich habe nochmal gegoogelt). Dennoch habe ich keine für mich verständliche Erklärung. KÖnnt ih mir helfen?
-
nein...
call by value:
void foo( int a ) { ... } int main() { int x = 5 foo( x ); }call by reference
void foo( int& a ) { ... } int main() { int x = 5 foo( x ); } // bzw, auch wenn es eigentlich call by pointer heißen müsste void foo( int* a ) { ... } int main() { int x = 5 foo( &x ); }zur Erklärung: bei "call by value" wird der Paramter als Kopie übergeben... Änderungen in der aufgerufenen Funktion haben keinen Einfluss auf die ursprüngliche Variable
bei "call by reference" wird die Variable selbst übergeben (keine Kopie) und Änderungen in der aufgerufenen Funktion spiegeln sich somit auch in der Variable wiedergutes Beispiel, was gerne für Erklärungen genommen wird:
void swap( int a, int b ) { int x = a; a = b; b = x; } // vs. void swap( int& a, int& b ) { int x = a; a = b; b = x; } int main() { int a, b; a = 5; b = 3; swap( a, b ); std::cout << "a: " << a << "\nb: " << b << std::endl; }teste beide Funktionen einfach mal, dann wirst du den Unterschied merken
-
Noch als kleiner Zusatz, bei
Call by Valuewird der Originalwert, welcher in der Main existiert nicht geändert, im Gegensatz zuCall by Referencewird der Wert geändert
-
Call by Value: schrieb:
Ich kopiere dir meinen 500€-Schein und gebe dir die Kopie. Du zündest die Kopie an und verbrennst sie restlos. Ich habe trotzdem meine 500€.
Call by Reference: schrieb:
Ich gebe dir meinen 500€-Schein. Du zündest ihn an und verbrennst ihn restlos. Ich steh ganz schön dumm da, weil ich jetzt um 500€ erleichtert bin.
Das sollte das ein wenig veranschaulichen...
-
Machine schrieb:
Call by Value: schrieb:
Ich kopiere dir meinen 500€-Schein und gebe dir die Kopie. Du zündest die Kopie an und verbrennst sie restlos. Ich habe trotzdem meine 500€.
Call by Reference: schrieb:
Ich gebe dir meinen 500€-Schein. Du zündest ihn an und verbrennst ihn restlos. Ich steh ganz schön dumm da, weil ich jetzt um 500€ erleichtert bin.
Das sollte das ein wenig veranschaulichen...
WTF! du hast 500er?

-
Hallo,
vielen Dank für die raschen Antworten. Habe es verstanden!!!lg, freakC++
PS: Ich könnte auch 500€ gebrauchen!!!

-
freakC++ schrieb:
PS: Ich könnte auch 500€ gebrauchen!
Kannste haben, kein Problem.. aber nur by Value
