Heim > Backend-Entwicklung > C++ > Hauptteil

Warum scheint das Ändern einer „const'-Variablen über einen Nicht-Const-Zeiger zu funktionieren, ändert aber nicht tatsächlich ihren Wert?

Mary-Kate Olsen
Freigeben: 2024-10-28 08:35:02
Original
155 Leute haben es durchsucht

Why Does Modifying a `const` Variable Through a Non-Const Pointer Seem to Work, but Doesn't Actually Change Its Value?

Ändern einer Konstante durch einen Nicht-Konstanten-Zeiger

In C kann eine Konstantenvariable nach der Initialisierung nicht mehr geändert werden. In bestimmten Szenarien kann es jedoch so aussehen, als ob eine Konstantenvariable geändert wurde. Betrachten Sie den folgenden Code:

<code class="cpp">const int e = 2;

int* w = (int*)&e;        // (1)
*w = 5;                   // (2)

cout << *w << endl;          // (3)
cout << e << endl;             // (4)</code>
Nach dem Login kopieren

Wenn Sie diesen Code ausführen, werden Sie ein unerwartetes Verhalten bemerken:

5
2
Nach dem Login kopieren

Auch wenn *w in (2) in 5 geändert wurde, e behält immer noch seinen ursprünglichen Wert von 2. Dieses scheinbar paradoxe Verhalten ist auf die folgenden Faktoren zurückzuführen:

  • (1) Die Dereferenzierung eines Konstantenzeigers (w) ermöglicht eine Änderung.
  • (2 ) Der geänderte Wert wird an dem Speicherort gespeichert, auf den w zeigt, was in diesem Fall der Speicherort ist, an dem e gespeichert ist.
  • Der Compiler optimiert jedoch den Code, indem er e als Konstante zur Kompilierungszeit behandelt und es nicht zur Laufzeit auszuwerten.

Wenn *w zur Laufzeit ausgewertet wird, gibt es daher den geänderten Wert (5) zurück. Wenn e jedoch zur Kompilierungszeit ausgewertet wird, wird sein ursprünglicher Wert (2) verwendet.

Dieses Verhalten wird in C als undefiniertes Verhalten bezeichnet. Das direkte oder indirekte Ändern einer const-Variable führt zu unvorhersehbaren Konsequenzen, und in solchen Situationen ist Vorsicht geboten.

Das obige ist der detaillierte Inhalt vonWarum scheint das Ändern einer „const'-Variablen über einen Nicht-Const-Zeiger zu funktionieren, ändert aber nicht tatsächlich ihren Wert?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!