修改 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.
所以, 定义成为常量的符号, 在后面的使用都会是常量的值. 这应该是为了防止常量被意外修改.
相关文章推荐
- 数列排序
- django 学习-17 Django会话Session
- 从一个页面跳转到tableBar相应的selectIndex时相应的方法
- 流API
- 【ITOO】DTO
- nefu 176 求总和
- 用OpenCV创建第一个图像
- com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
- ubuntu下使用锐捷客户端链接校园网
- STL中stack详解
- JavaWeb学习笔记(一)---Web相关知识和HTTP协议
- 配置临时环境变量
- FZUOJ 2150 Problem 2150 Fire Game (双起点BFS)
- CMD运行java class文件
- centos7环境下jdk+tomcat+jenkins+svn安装
- VS2013写window服务,实现定时短信功能
- 参赛蓝桥(新手推荐阅读)
- 2016第2周日
- 問題排查:建立選單時的錯誤 errcode:65318,errmsg:must use utf-8 charset hint: [Vwda70520vr18]
- Linux学习笔记:MySQL的授权