一个关于C++指针的问题(const int型的指针)

const int a=10;
int *p=(int *)&a;
*p=20;
cout<<*p<<' '<<a<<endl;

结果是20 10。但是p和&a是一样的。为什么在同一个地址值下值会不一样的?

这就涉及到内存分配的问题,由于a被定义为常量,所以其被保存在 “常量存储区” ,而在给类型为int *变量p赋值是将原为const int *强制性转换成int* ,int *p是局部变量,我们知道 局部变量 是被保存在栈区里的,所以就会导致同一个内存编号,却有两个不同的值。

说明:
&a的类型为 const int *
p的类型为 int *
所以在赋值时需要强制转换成(int *),而正因为你使用了强制性转换类型,所以导致了内存分配的方式改变了。

一般都是使用这种非正常手段来改变常量的值。但意义不大,因为在实际开发产品过程中很少有人会这样用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-02
第三行不是重新 *p=20; 不是被重新赋值了么,如果把这句去掉,两个值就一样了追问

但是如果我输入cout<<p<<' '<<&a<<endl;会发现两个地址值是一样的。同一个地址值下面的值为什么会不一样?

追答

相似回答