先看常量重叠
int main(int argc, char* argv[])
{
const int i=0;
int *j = (int *) &i;
*j=1;
cout<<&i<<endlcout<<j<<endl;
cout<<i<<endl;
cout<<*j<<endl;
return 0;
}
结果是
0012ff7c
0012ff7c
0
1
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!
最后注意下:
char* p = "hello world1";//常量区
char a[] = "hello world2";//栈区
看debug下的内存吧
0xcccccccc所有自动变量
0xcdcdcdcd new内存
0xdddddddd delete内存
0xfdfdfdfd 保护堆内存
也就解释了new 老是是铪 妄 等字符。。未赋值的老是-858993460等了