Heim >Backend-Entwicklung >C++ >Warum werden beim Ändern der Speicheradresse einer „const'-Variablen unterschiedliche Werte angezeigt?

Warum werden beim Ändern der Speicheradresse einer „const'-Variablen unterschiedliche Werte angezeigt?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 18:58:10762Durchsuche

Why Does Modifying a `const` Variable's Memory Address Show Different Values?

Verstehen des Verhaltens von Speicheradressen mit Variablen und Konstanten

In einem Codeausschnitt, der eine const-Variable und einen Zeiger darauf enthält, ist die Beobachtung verschiedener Werte an derselben Speicheradresse werfen Fragen auf.

Code Analyse

#include <iostream>
using namespace std;

int main() {
    const int N = 22;
    int * pN = const_cast<int*>(&N);
    *pN = 33;
    cout << N << '\t' << &N << endl;
    cout << *pN << '\t' << pN << endl;
}

Ausgabe

22      0x22ff74

33      0x22ff74

Frage

Warum tun wir Beobachten Sie zwei verschiedene Werte (22 und 33) an derselben Speicheradresse (0x22ff74)?

Antwort

Entgegen der Beobachtung sind nicht zwei unterschiedliche Werte an derselben Speicheradresse gespeichert. Dies ist ein Ergebnis von Compiler-Optimierungen.

Der Compiler hat die Befugnis, jede Erwähnung einer const-Variablen so zu behandeln, als ob der Wert der Variablen zur Kompilierungszeit direkt verwendet würde. In diesem Code betrachtet der Compiler den Code als:

int * pN = const_cast<int*>(&22);
*pN = 33;

Der Compiler hat das Recht, diese Optimierung anzuwenden. Es ist jedoch wichtig zu beachten, dass der Compiler nicht auf diese Aktion beschränkt ist. Möglicherweise kommen andere Optimierungen zum Einsatz, darunter solche, die möglicherweise Daten auf Ihrer Festplatte löschen könnten, wenn Sie riskante Praktiken wie das Ändern des mit Konstantenvariablen verknüpften Speichers anwenden.

Das obige ist der detaillierte Inhalt vonWarum werden beim Ändern der Speicheradresse einer „const'-Variablen unterschiedliche Werte angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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