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.
#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; }
22 0x22ff74 33 0x22ff74
Warum tun wir Beobachten Sie zwei verschiedene Werte (22 und 33) an derselben Speicheradresse (0x22ff74)?
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!