变量同时有两个值?
Variable has two values simultaneously?
我在网上遇到了这个例子,我不知道它是如何工作的。
#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;
}
相关文章:
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 为什么动态分配的两个变量的内存位置不是连续的?
- 是否可以在C++中使用宏交换两个变量的出现?
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 正确证明C 中的两个变量合理(我想将它们视为一个变量)
- 可视C 编译器将相同的存储位置提供给两个变量
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- 在rootframework中的根文件中编写两个变量
- 最短路径,带有两个变量
- 加入两个变量和LCD打印
- 在循环中声明两个变量以逆转字符串?在C 中
- 具有两个变量的"for"循环,一个变量每次迭代递增,每隔一次迭代递增
- 如何在C++中使用一个类中两个变量的值
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 如何在我存储的两个变量之间生成随机数