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 20
but it actually prints 10 20
.
它也显示这两个贵重物品有相同的地址。有人可以解释幕后发生了什么吗?
答
未定义的行为和优化编译器。编译器知道从value
的声明,value
“的价值绝不会在一个结构良好的程序改变,所以它优化了其中value
的价值将被检查的位,只是取值它知道value
了。
至于地址,你永远不会拿到地址p
,并且p
是相同的&value
并不令人感到意外,因为你以前几行的方式分配它。
未定义的行为...? – 2014-12-07 03:45:06
@remyabel也许但发生了什么? – qwertymk 2014-12-07 03:45:51
请参阅[如何在同一地址产生2个不同值的变量?](http://stackoverflow.com/q/22656734/1708801)...试图修改一个const对象是未定义的行为这个问题可能是重复的。 – 2014-12-07 03:46:20