Heim > Backend-Entwicklung > C++ > Hauptteil

Warum ändert „changeValue(value)' „value' in C/C nicht?

DDD
Freigeben: 2024-11-16 08:47:03
Original
301 Leute haben es durchsucht

Why Does `changeValue(value)` Not Change `value` in C/C  ?

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

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

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!

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