您的位置:首页 > 其它

关于const的一个问题

2014-04-02 09:44 197 查看
下面的一段代码:

#include <iostream>

using namespace std;

int main(int argc,char*argv[])

{

const int a=1;

int*p = (int*)&a;

cout <<"source:a="
<<a <<"
" <<"&a="
<<&a
<<endl;

cout
<<"source:*p="
<<*p
<<" "
<<"p="
<<p
<<endl;

(*p)++;

cout <<"modify:a="
<<a <<"
" <<"&a="
<<&a
<<endl;

cout
<<"modify:*p="
<<*p
<<" "
<<"p="
<<p
<<endl;

return 0;

}

运行以后的结果如下:

source:a=1 &a=0012FF7C

source:*p=1 p=0012FF7C

modify:a=1 &a=0012FF7C

modify:*p=2 p=0012FF7C

Press any key to continue

有一点很奇怪,就是同时一块内存地址0012FF7C,为什么用a读取的时候就是1,但是用*p读取的时候怎么就变成了2呢?

这个是编译器优化的一个常量折叠,也就是说编译器在看到a的时候直接用1来替换,而不是去读取它的内存地址的值,事实上,0012FF7C这块内存地址的值在执行完(*p)++以后已经变成2了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: