关于指针常量(编译器优化)

牛客题目:

点击查看代码
const int a =10;
int *p=(int*)(&a);
*p=20;
cout<<"a="<<a<<",*p="<<*p<<endl;

输出:a=10,*p=20;
原因:
a = 10, *p = 20 因为使用const 编译器会优化,对于以后见到a ,编译器立马用10替代.
而p是新定义的一个指针变量,开始p通过 int *p = (int *)(&a)获得了栈区常量a的地址.
即p指向这个地址,但是因为const 导致编译器优化,直接在符号表中 用10代替a了,所以导致
打印a还是10,而打印那个内存单元的地址就变成了20

posted @ 2022-03-09 10:27  TomoyaAT  阅读(49)  评论(0)    收藏  举报