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
Freigeben: 2024-12-20 18:58:10
Original
715 Leute haben es durchsucht

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

Ausgabe

22      0x22ff74

33      0x22ff74
Nach dem Login kopieren

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

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!

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