有关const int与int *
来源:6-4 const与指针
慕少2394008
2023-11-20
const int a = 10;
int p = (int)&a;
*p = 30;
std::cout << *p << std::endl;
std::cout << a << std::endl;
为什么vs输出结果是30 10?
单步调试在内存中 a的值已经被修改为30
写回答
1回答
-
这个问题应该有人问过,你可以搜索下试试。是这样的,当a被声明为const int时,你和编译器达成协议要求a的值不准改变。所以你在cout a时,编译器会给你这个承诺的信息,但是具体怎么实现这个效果编译器会有自己的安排。当你通过指针骗过编译器修改存储a位置的信息时,其实cout a的地方编译器可能已经优化成了直接输出一个10的信息了。具体你可以反汇编跟踪验证下。对了,上面的语句写丢了指针符号: int* p = (int*)&a;
10
相似问题