Das Rätsel von Call-by-Value: Das Rätsel der Werterhaltung lösen
In C/C werden Funktionsparameter von Natur aus als Wert übergeben . Dies bedeutet, dass eine Replik der Originalvariablen an die Funktion übergeben wird und nicht die Originalvariable selbst. Dieses Verhalten kann zu Verwirrung führen, wie der folgende Codeausschnitt zeigt:
void changeValue(int value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Beim Ausführen dieses Codes könnte man erwarten, dass die Ausgabe „Der Wert ist: 6“ lautet. nach dem Funktionsaufruf. Überraschenderweise bleibt die Ausgabe jedoch weiterhin „Der Wert ist: 5“. Der Grund für dieses Verhalten liegt in den Feinheiten von Call-by-Value.
Wenn die Funktion changeValue() aufgerufen wird, wird eine Kopie des Werts 5 erstellt und an die Funktion übergeben. Dies bedeutet, dass innerhalb der Funktion der Kopie der Wert 6 zugewiesen wird und der ursprüngliche Wert 5 unberührt bleibt.
Um dieses Problem zu beheben und die ursprüngliche Variable zu ändern, muss man auf Call-by-Reference zurückgreifen. Bei dieser Technik wird der Funktion ein Verweis auf die ursprüngliche Variable übergeben. In diesem Fall kann die Funktion dann den ursprünglichen Wert ändern und so die Änderungen in der aufrufenden Funktion widerspiegeln.
void changeValue(int& value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Bei der Ausführung des Codes lautet die Ausgabe nun „Der Wert ist: 6.“ Dies verdeutlicht den Unterschied zwischen Call-by-Value und Call-by-Reference und wie wichtig es ist, basierend auf dem beabsichtigten Verhalten des Programms das geeignete auszuwählen.
Das obige ist der detaillierte Inhalt vonWarum ändert „changeValue(value)' „value' in C/C nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!