Heim >Backend-Entwicklung >C++ >Warum zeigt eine Const-Variable an derselben Speicheradresse in C unterschiedliche Werte an?
Variable an derselben Adresse, die abweichende Werte erzeugt
Betrachten Sie den folgenden Codeausschnitt:
#include <iostream> using namespace std; int main(void) { 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; return 0; }
Dieser Code gibt überraschenderweise aus :
40 65 0xbfacbe8c 0xbfacbe8c
Wie ist es möglich, dass die Variable a1 gleichzeitig Adresse erzeugt zwei unterschiedliche Werte, 40 und 65?
Antwort:
Dieses Verhalten ist das Ergebnis eines undefinierten Verhaltens. Der Code ändert den Wert einer const-Variablen (a1) und verstößt damit gegen die Regeln von C. Gemäß dem C-Standard (Abschnitt 7.1.6.1 Absatz 4) führt jeder Versuch, ein const-Objekt während seiner Lebensdauer zu ändern, zu undefiniertem Verhalten.
In diesem Fall führt die Änderung der const-Variablen a1 über den Zeiger c1 zu unvorhersehbare Ergebnisse. Der Compiler kann die Änderung oder das dokumentierte Verhalten ignorieren oder sogar das Programm beenden.
Daher ist das beobachtete Verhalten, bei dem a1 zwei verschiedene Werte erzeugt, eine Folge undefinierten Verhaltens. Vom Ändern von Konstantenvariablen wird dringend abgeraten und kann zu unvorhersehbarem und fehlerhaftem Programmverhalten führen.
Das obige ist der detaillierte Inhalt vonWarum zeigt eine Const-Variable an derselben Speicheradresse in C unterschiedliche Werte an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!