Heim > Backend-Entwicklung > C++ > Warum geben Variablen an derselben Speicheradresse in C unterschiedliche Werte aus?

Warum geben Variablen an derselben Speicheradresse in C unterschiedliche Werte aus?

Patricia Arquette
Freigeben: 2024-12-03 03:44:09
Original
140 Leute haben es durchsucht

Why Do Variables at the Same Memory Address Output Different Values in C  ?

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

Überraschenderweise dieser Code Ausgänge:

40 65
0xbfacbe8c 0xbfacbe8c
Nach dem Login kopieren

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!

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