c++,指向同一位置的两个指针如何保存不同的值

c++, How do two pointers to same location hold different values

本文关键字:指针 保存 两个 何保存 c++ 位置      更新时间:2023-10-16

>有人向我展示了以下代码片段,并问它应该输出什么

#include <iostream>
using namespace std;
int main() {
    const int value = 10;
    int* p = (int*)&value;
    *p = 20;
    cout << value << " " << *p << endl
        << &value << " " << p << endl;
    return 0;
}

如您所见,有一个常量value是 10,还有一个指针p指向值的地址,然后指向的地址得到一个不同的值。

我希望程序打印20 20但它实际上打印10 20.
它还表明两个贵重物品具有相同的地址。有人可以解释一下这里幕后发生的事情吗?

未定义的行为和优化编译器。编译器从value的声明中知道value的值在一个格式良好的程序中永远不会改变,所以它优化了检查value值的位,只取它知道value的值。

至于地址,你从不取p的地址,而且p&value相同并不奇怪,因为你在几行之前以这种方式分配了它。