您的位置:首页 > 其它

修改 const 的值之后的奇怪变化

2016-01-17 22:08 197 查看
#include <iostream>

int main(void)
{
const int a = 10;
int* p = (int*)&a;
*p = 20;
std::cout << a << "|" << &a << std::endl;
std::cout << *p << "|" << p << std::endl;
return 0;
}


输出结果

10|0x7ffed3169dfc
20|0x7ffed3169dfc

这个就有点奇怪了, 明明地址是一样的值确不一样. 我估计是编译器搞的鬼.

于是我打印了 *(&a) 和 *(int*)((char*)(&a)) 发现前者是 10, 后者是 20.

编译器会将连续的 * 和 & 直接优化掉, 但估计后面那个就不会优化了. 所以输出了 20.

所以, 定义成为常量的符号, 在后面的使用都会是常量的值. 这应该是为了防止常量被意外修改.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: