#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
const int a = 10;
int* p = (int*)&a;
*p = 100;
cout << a << endl; // 10
cout << *p << endl; // 100
// 下面两行打印地址一样
cout << &a << endl;
cout << p << endl;
return 0;
}
请问这是怎么回事?我已经修改了 a
的值,为什么打印 a
还是 10
?
这属于未定义行为,不建议在正式代码中使用。而 a 之所以还是 10,可能是编译器优化的结果(部分编译器编译结果不是 10)。可以把汇编代码导出看看。