Heim > Backend-Entwicklung > C++ > Hauptteil

Warum ändert Call-by-Value die ursprüngliche Variable nicht?

DDD
Freigeben: 2024-11-21 18:43:13
Original
806 Leute haben es durchsucht

Why Doesn't Call-by-Value Modify the Original Variable?

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;
}
Nach dem Login kopieren

Ü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 &amp;value);
Nach dem Login kopieren

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 &amp;value)
{
  value = 6;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage