1 #include <iostream> 2 #include<climits> 3 4 using namespace std; 5 6 int main() 7 { 8 const int a = 3; 9 10 void* p = NULL; 11 p = (void*)&a; 12 13 *( (int*)p ) = 1; 14 15 cout<< "P址:" << p << "值:" << *( (int*)p ) 16 << endl 17 << "a址:" << &a << "值:" << a 18 << endl; 19 20 cin.get(); 21 22 return 0; 23 }
源码如上,运行结果如下:
求教遇到过这种问题的大神,这是什么原理?
这个问题是“常量折叠”问题。
定义了P,存储的地址是a的地址,所以p 和 &a 的值是一样的。
*( (int*)p ) = 1;
该操作结束之后,这个地址存储的数据变为了1,
估计您的疑惑是a的值应该也是1.
但是实际上,在编译阶段,编译器就已经将:
cout<< "a址:" << &a << "值:" << a << endl;
转换为
cout<< "a址:" << &a << "值:" << 3<< endl;
这样也就解释了您的问题。
详情可以看
http://www.cnblogs.com/wuqi/p/4573028.html