C++,如何做两个指向同一位置值不同

问题描述:

有人给我看了下面的代码片段,并问是什么事应该输出C++,如何做两个指向同一位置值不同

#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 20but it actually prints 10 20.
它也显示这两个贵重物品有相同的地址。有人可以解释幕后发生了什么吗?

+5

未定义的行为...? – 2014-12-07 03:45:06

+0

@remyabel也许但发生了什么? – qwertymk 2014-12-07 03:45:51

+0

请参阅[如何在同一地址产生2个不同值的变量?](http://*.com/q/22656734/1708801)...试图修改一个const对象是未定义的行为这个问题可能是重复的。 – 2014-12-07 03:46:20

未定义的行为和优化编译器。编译器知道从value的声明,value的价值绝不会在一个结构良好的程序改变,所以它优化了其中value的价值将被检查的位,只是取值它知道value了。

至于地址,你永远不会拿到地址p,并且p是相同的&value并不令人感到意外,因为你以前几行的方式分配它。