Heim > Backend-Entwicklung > C++ > Hauptteil

Warum führt das Ändern eines „const'-Werts durch einen nicht konstanten Zeiger zu undefiniertem Verhalten, gibt aber dennoch unterschiedliche Werte für den Zeiger und die ursprüngliche Variable aus?

Barbara Streisand
Freigeben: 2024-10-28 04:47:02
Original
226 Leute haben es durchsucht

Why does modifying a `const` value through a non-const pointer lead to undefined behavior but still print different values for the pointer and the original variable?

Ändern einer Konstante durch einen Nicht-Konstanten-Zeiger

Betrachten Sie den folgenden Code:

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

int* w = (int*) &e;          // (1) cast to remove const-ness
*w = 5;                        // (2)

cout << *w << endl;            // (3) outputs 5
cout << e << endl;             // (4) outputs 2

cout << "w = " << w << endl;   // (5) w points to the address of e
cout << "&e = " << &e << endl;</code>
Nach dem Login kopieren

In (1 ), w zeigt auf die Adresse von e. In (2) wird dieser Wert auf 5 geändert. Wenn jedoch die Werte von *w und e angezeigt werden, sind ihre Werte unterschiedlich. Wenn Sie jedoch den Zeiger w und die Adresse von e ausgeben, haben sie denselben Wert.

Wie kommt es, dass e immer noch 2 enthält, selbst wenn es in 5 geändert wurde? Wurden sie an einem separaten Ort aufbewahrt? Oder ein Provisorium? Aber wie kommt es, dass der Wert, auf den w zeigt, immer noch die Adresse von e ist?

Antwort

Sobald Sie einen konstanten Wert ändern, betreten Sie undefiniertes Verhaltensgebiet. Um jedoch zu spekulieren:

  • (3) und (4): *w wird zur Laufzeit ausgewertet, während e als Konstante zur Kompilierungszeit behandelt wird. Daher die unterschiedlichen aufgedruckten Werte.

Das obige ist der detaillierte Inhalt vonWarum führt das Ändern eines „const'-Werts durch einen nicht konstanten Zeiger zu undefiniertem Verhalten, gibt aber dennoch unterschiedliche Werte für den Zeiger und die ursprüngliche Variable aus?. 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!