Heim >Backend-Entwicklung >C++ >Warum zeigt eine Const-Variable an derselben Speicheradresse in C unterschiedliche Werte an?

Warum zeigt eine Const-Variable an derselben Speicheradresse in C unterschiedliche Werte an?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 17:26:14855Durchsuche

Why Does a Const Variable at the Same Memory Address Show Different Values in C  ?

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!

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