码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-01-17 23:17:18      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include <iostream>
 2 
 3 int main(void)
 4 {
 5     const int a = 10;
 6     int* p = (int*)&a;
 7     *p = 20;
 8     std::cout << a << "|" << &a << std::endl;
 9     std::cout << *p << "|" << p << std::endl;
10     return 0;
11 }

输出结果

10|0x7ffed3169dfc
20|0x7ffed3169dfc

 

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

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

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

 

所以, 定义成为常量的符号, 在后面的使用都会是常量的值. 这应该是为了防止常量被意外修改. 

 

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

标签:

原文地址:http://www.cnblogs.com/negro/p/5137931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!