Beispiel für Call by value und Call by reference
-
Hallo,
könnte mir jemand bitte ein gutes Beispiel für callbyvalue und callbyreference reinschreiben und erklären?
Ich versteh das einfach nicht...
Schonmal danke im Vorraus!
-
Klar:
int main(void) { int var1 = 2, var2 = 2; quad1(var1); // keine Änderung von var1 quad2(var2); // var2 wird verändert, da Übergabe per Referenz return 0; } // Call by value void quad1(int a) { a = a*a; } // Call by reference void quad2(int &a) { a = a*a; }
Bei der Funktion quad1() wird nur eine Kopie der übergebenen Variable an die Funktion übergeben. Änderungen haben daher keine Auswirkung auf die tatsächliche übergebene Variable.
ph4nt0m
-
Und was wäre die ausgabe bei:
#include <iostream> using namespace std; int main(void) { int var1 = 2, var2 = 2; quad1(var1); // keine Änderung von var1 quad2(var2); // var2 wird verändert, da Übergabe per Referenz return 0; } // Call by value void quad1(int a) { a = a*a; cout<<a<<" * "<<a<<" = "<<a*a<<endl; } // Call by reference void quad2(int &a) { a = a*a; cout<<a<<" * "<<a<<" = "<<a*a<<endl; }
2 * 2 = 4 2 * 2 = 4
Oder kommt da was anderes raus?
-
Das ist schon richtig. Call by value/reference bezieht sich aber auf die Variablen die du der Funktion übergibst, hier also var1/var2 in der main-Funktion!
#include <iostream> using namespace std; int main(void) { int var1 = 2, var2 = 2; quad1(var1); // var1 wird hier nur scheinbar quadriert, siehe Ausgabe unten quad2(var2); cout << "2*2 = " << var1 << endl; cout << "2*2 = " << var2 << endl; return 0; } // Call by value void quad1(int a) { a = a*a; } // Call by reference void quad2(int &a) { a = a*a; }
Die Ausgaben sind unterschiedlich, obwohl der Rumpf der beiden Methoden exakt identisch ist.
ph4nt0m
-
#include <iostream> using namespace std; int main(void) { int var1 = 2, var2 = 2; quad1(var1); // keine Änderung von var1 quad2(var2); // var2 wird verändert, da Übergabe per Referenz std::cout << var1 << std::endl; // 2 std::cout << var2 << std::endl; // 4 return 0; } // Call by value void quad1(int a) { a = a*a; } // Call by reference void quad2(int &a) { a = a*a; }
Es geht nicht um die internen Variablen, sondern um die Variablen, die beim Aufruf übergeben werden
EDIT: Ah, konnte meinen Beitrag nicht abschicken und bin deshalb 5 sec zu spät
Gruß
Don06
-
/* * * * * * * * * * * * * * * * * * * */ /* Wenn ich den Code so */ /* Compile, bekomme ich die */ /* Fehlermeldung: */ // Error: Ungelöste externe 'quad2(int)' referenziert von // C:\DOKUMENTE UND EINSTELLUNGEN\DARKNESS\EIGENE DATEIEN\C++\NEW\CALLBYREF2\WINDOWS\DEBUG_BUILD\CALLBYREF2.OBJ #include <iostream> using namespace std; void quad1(int a); void quad2(int a); int main(void) { int var1 = 2, var2 = 2; quad1(var1); // var1 wird hier nur scheinbar quadriert, siehe Ausgabe unten quad2(var2); cout << "2*2 = " << var1 << endl; cout << "2*2 = " << var2 << endl; return 0; } // Call by value void quad1(int a) { a = a*a; } // Call by reference void quad2(int &a) { a = a*a; }
-
Hi,
das liegt daran, dass das...
void quad2(int a); // Zeile 13
...und das...
void quad2(int [b]&[/b]a) // Zeile 35 { a = a*a; }
...zwei unterschiedliche Dinge sind.
-
void quad2(int a) != void quad2(int &a)