变量同时有两个值?

Variable has two values simultaneously?

本文关键字:两个 变量      更新时间:2023-10-16

我在网上遇到了这个例子,我不知道它是如何工作的。

#include <iostream>
int main()
{
int const a = 1;
int* pa = (int*) &a;
*pa = 2;
printf("%p %d %p %d", (void*) &a, a, (void*) pa, *pa);
return 0;
}

当我在我的机器上编译它时,我得到:

0xffffcc04 1 0xffffcc04 2

这意味着内存位置0xffffcc04同时具有值 1 和 2???编译器是否优化了a,还是我错过了什么?

附言当我在调试中运行它时,a*pa是 2...

更改const值会产生未定义的行为,而"神秘"输出就是这种未定义的行为。 实际上,没有必要去研究为什么在未定义行为的世界里的行为会像那时这样。但是在您的情况下,它可能没有使用a,因为您将其声明为const,因此编译器"知道"该值并可能决定不访问该变量。 只是为了展示一些奇怪的东西,请尝试:

int main()
{
volatile int const a = 1;
int* pa = (int*) &a;
*pa = 2;
printf("%p %d %p %d", (void*) &a, a, (void*) pa, *pa);
return 0;
}