注册 登录
编程论坛 C++教室

同一个地址 不同的值。。。

sunspirit 发布于 2007-04-25 13:26, 462 次点击
本想试试通过操作地址 改变const的值 却发现。。。
运行下就知道了。。。
int main(){
const int i =20;
long x = (long)&i;
int *y = (int *)x;
*y = 4;
cout << y <<endl;
cout << *y <<endl;
cout <<&i <<endl;
cout << i <<endl;
}

结果是:
0012FF7C
4
0012FF7C
20

麻烦解释下 谢谢~

[此贴子已经被作者于2007-4-25 13:48:31编辑过]

9 回复
#2
aipb20072007-04-25 13:41


#3
PcrazyC2007-04-25 17:32

你把const去掉试试,好像两个变量放的地方不同,一个在静态储存区,一个在动态储存区

#4
幽灵嫖客2007-04-25 18:14
以下是引用PcrazyC在2007-4-25 17:32:23的发言:

你把const去掉试试,好像两个变量放的地方不同,一个在静态储存区,一个在动态储存区

不同地方为什么地址一样?

#5
unicorn2007-04-25 19:19

<<More Exceptional C++ >> 里说过:

你可以取一个const符号常量的地址:对于基本数据类型的const常量,编译器会重新在内存中创建它的一个拷贝,你通过其地址访问到的就是这个拷贝而原始符号常量;

程序代码:

...


const long lng = 10;            


long *pl = (long*)&lng;         //去取常量地址


*pl = 1000;                          //“迂回修改”


cout << *pl << endl;             //1000,修改拷贝


cout << lng << endl;             //10,原始常量并没有修改


...

#6
Arcticanimal2007-04-25 19:39
原来如此,也受教了
#7
UnDead2007-04-30 15:00

有意思!!

#8
UnDead2007-04-30 15:10
回复:(unicorn)

顶一个~~~~

#9
未入流小菜鸟2007-05-01 14:12
学习了。。。
#10
I喜欢c2007-05-01 14:23


这就是指针的高深所在.
1