下面的一段代码:
#include <iostream>
using namespace std;
int main(int argc,char*argv[])
{
}
运行以后的结果如下:
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了。