首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

哪位高手可以帮小弟我解释解释!

2012-03-24 
谁可以帮我解释解释!!!#includestdio.h#includeiostream.hvoidmain(){constinti10int*pp(int*)&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;

}
结果:   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是因为使用的是符号表中的值.

热点排行