Variable mit identischer Adresse, die eindeutige Werte ausgibt
Betrachten Sie den folgenden Codeausschnitt:
const int a1 = 40; const int* b1 = &a1; char* c1 = (char *)(b1); *c1 = 'A'; int *t = (int*)c1; cout << a1 << " " << *t << endl; cout << &a1 << " " << t << endl;
Überraschenderweise dieser Code Ausgänge:
40 65 0xbfacbe8c 0xbfacbe8c
Wie ist es möglich für eine Variable an derselben Adresse (c1 und t), um zwei verschiedene Werte ('A' und 65) zu erzeugen?
Die Erklärung liegt in der Natur des undefinierten Verhaltens. In diesem Fall löst die Änderung einer konstanten Variablen (*c1) undefiniertes Verhalten aus. Gemäß dem C-Standard kann undefiniertes Verhalten zu unvorhersehbaren Ergebnissen führen, von der Programmbeendigung bis hin zu dokumentiertem Verhalten (mit oder ohne Diagnosemeldungen).
In diesem speziellen Fall ermöglicht das undefinierte Verhalten dem Compiler, den Code zu optimieren eine unerwartete Art und Weise. Durch Ändern der Konstantenvariablen überschreibt der Compiler effektiv den ursprünglichen Wert von a1. Es ist jedoch wichtig zu beachten, dass dieses Verhalten nicht garantiert ist und je nach Compiler und Umgebung variieren kann.
Daher ist es bei der Arbeit mit konstanten Variablen und Zeigern wichtig, eine Änderung dieser Variablen zu vermeiden, um ein vorhersehbares Programm sicherzustellen Verhalten.
Das obige ist der detaillierte Inhalt vonWarum geben Variablen an derselben Speicheradresse in C unterschiedliche Werte aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!