谁可以帮我解释解释!!!
#include <stdio.h>
#include <iostream.h>
void main()
{
const int i = 10;
int *p;
p = (int *)&i;
*p = 9;
cout < <i < < " ------ " < <*p < <endl;
cout < <&i < < " ------ " < <p < <endl;
}
结果: 10 9
谁可以告诉我为什么??
p存放在哪里??和i相同吗??为什么值不同??
谢谢!!
[解决办法]
#include <stdio.h>
#include <iostream.h>
void main()
{
const int i = 10;
int *p;
p = (int *)&i;
*p = 9;
cout < <i < < " ------ " < <*p < <endl;
cout < <&i < < " ------ " < <p < <endl;
}
p和i存放在同一个存储单元中;
C++在定义一个const对象时将它们保存在符号表中,在整个编译期间都使用此符号表中的常量!~~
你程序中const int i = 10;定义和一个整型常量,在一般情况下是不能对i进行修改的,p = (int *)&i;使得p和i指向同一单元,其实执行完*p = 9;后,此单元内容也被改为9,但是输出的i值确是保存在符号表中的10,这就是保护const对象不能被修改!
你可以在main最后设置一个断点,然后调试,在watch中输入i,此时的i也是9,但是输出的是10是因为使用的是符号表中的值.