有关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回答

quickzhao

2023-11-20

这个问题应该有人问过,你可以搜索下试试。是这样的,当a被声明为const int时,你和编译器达成协议要求a的值不准改变。所以你在cout a时,编译器会给你这个承诺的信息,但是具体怎么实现这个效果编译器会有自己的安排。当你通过指针骗过编译器修改存储a位置的信息时,其实cout a的地方编译器可能已经优化成了直接输出一个10的信息了。具体你可以反汇编跟踪验证下。对了,上面的语句写丢了指针符号: int* p = (int*)&a;

1
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程