【发布时间】:2014-12-07 03:43:07
【问题描述】:
有人给我看了下面的代码sn-p,问它应该输出什么
#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.
这也表明这两个贵重物品具有相同的地址。有人能解释一下幕后发生的事情吗?
【问题讨论】:
-
未定义的行为...?
-
@remyabel 也许但是发生了什么?
-
见How is a variable at the same address producing 2 different values? ...试图修改一个常量对象是未定义的行为这个问题很可能是重复的。
-
@Shafik 不确定什么问题 n.m.标记为重复,但您链接的那个似乎是一个公平的重复。是否真的有必要让回答者因为基本上重复相同的信息而获得代表?
-
@remyabel 是的,但我回答了这个问题,所以我不会关闭它,可能有更好的重复,但我没有时间看。看到这个meta question。
标签: c++ c constants compiler-optimization