Call-by-Value: Die Einschränkungen verstehen
Betrachten Sie dieses Call-by-Value-Beispiel, in dem wir versuchen, den Wert der Eingabe zu ändern Parameter innerhalb einer Funktion:
#include <iostream> using namespace std; void changeValue(int value); int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; } void changeValue(int value) { value = 6; }
Überraschenderweise bleibt die Ausgabe 5, obwohl wir versucht haben, sie in zu ändern 6. Dieses Verhalten ergibt sich aus dem Grundprinzip von Call-by-Value in C/C.
Die Essenz von Call-by-Value
In Call-by -Wert wird eine Kopie der Originalvariablen als Argument an die Funktion übergeben. Alle an dieser Kopie innerhalb der Funktion vorgenommenen Änderungen bleiben auf diesen lokalen Bereich beschränkt und wirken sich nicht auf die ursprüngliche Variable aus.
In unserem Beispiel erhält die Funktion changeValue eine Kopie des Werts von main(). Alle an dieser Kopie vorgenommenen Änderungen wirken sich nicht auf die ursprüngliche Wertvariable aus.
Die Lösung: Pass-by-Reference
Um die ursprüngliche Variable innerhalb einer Funktion zu ändern, Wir müssen Pass-by-Reference verwenden. In C/C wird dies wie folgt bezeichnet:
void changeValue(int &value);
Durch die Verwendung von & in der Funktionssignatur erstellen wir einen Verweis (Alias) auf die Originalvariable. Alle an der Referenz vorgenommenen Änderungen ändern auch die ursprüngliche Variable.
Beispiel für die Übergabe als Referenz
void changeValue(int &value) { value = 6; }
Wenn wir nun changeValue in main() aufrufen, An die Funktion wird ein Verweis auf den Wert übergeben, der es ihr ermöglicht, den ursprünglichen Wert zu ändern:
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
In diesem Szenario spiegelt die Ausgabe den geänderten Wert korrekt wider: 6.
Das obige ist der detaillierte Inhalt vonWarum ändert Call-by-Value die ursprüngliche Variable nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!