社区
C++ 语言
帖子详情
大家探讨下这几行代码!
lhz62004753
2008-10-31 04:44:08
const int i=40;//常量 i
int *p = (int *)&i;//强制转换
*p = 80;
cout<<*p<<endl;
cout<<i<<endl;
cout<<p<<" "<<&i<<endl;
运行结果是*p的值为80,而i的值还是40,不知道是为什么,有哪位高手解答下,谢谢
...全文
133
13
打赏
收藏
大家探讨下这几行代码!
const int i=40;//常量 i int *p = (int *)&i;//强制转换 *p = 80; cout<<*p<<endl; cout<<i<<endl; cout<<p<<" "<<&i<<endl; 运行结果是*p的值为80,而i的值还是40,不知道是为什么,有哪位高手解答下,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lhz62004753
2008-10-31
打赏
举报
回复
谢谢各位了,就是说编译器在后头搞的鬼,其实i的值是改变了的。。。。
机智的呆呆
2008-10-31
打赏
举报
回复
volatile const int i=40;//取消编译器优化
redleaves
2008-10-31
打赏
举报
回复
const会编译时展开,直接用值替换对象本身...
lq651659889
2008-10-31
打赏
举报
回复
up
yuegui2
2008-10-31
打赏
举报
回复
*p = 80;
很明显的赋值语句嘛
太乙
2008-10-31
打赏
举报
回复
编译器在编译期间就做了手脚!
将所有的i替换成了40!!
hhyttppd
2008-10-31
打赏
举报
回复
[Quote=引用 6 楼 luansxx 的回复:]
cout < <i < <endl;
在编译这个的时候,编译器认为i是常量,直接用40替换了,并没有去关心i是不是已经变了。另外i肯定是有地址的,而且实实在在存在,并不是编译器临时变量。
[/Quote]
我观察了一个VS2005的汇编输出,果然如你所言。
Fighting Horse
2008-10-31
打赏
举报
回复
cout < <i < <endl;
在编译这个的时候,编译器认为i是常量,直接用40替换了,并没有去关心i是不是已经变了。另外i肯定是有地址的,而且实实在在存在,并不是编译器临时变量。
VsirSoft
2008-10-31
打赏
举报
回复
int *p = (int *)&i;这句话只是将i的地址赋值给了*p而已,而p并没有指向i的地址。
哦 另外2楼所说的有点错误 p是指向i的地址的 只不过地址的内容无法更改
VsirSoft
2008-10-31
打赏
举报
回复
关键就在于 const 楼主应该去搜索一篇关于const的文章学习一下 把const去掉你会看到效果
hhyttppd
2008-10-31
打赏
举报
回复
可能是生成了临时变量,这种行习标准上说是未定义的(undefined)
相当于
const int i=40;//常量 i
//int *p = (int *)&i;//强制转换
int temp = 40;
int * p = &temp;
*p = 80;
cout < <*p < <endl;
cout < <i < <endl;
cout < <p < <" " < <&i < <endl;
coverallwangp
2008-10-31
打赏
举报
回复
[Quote=引用楼主 lhz62004753 的帖子:]
const int i=40;//常量 i
int *p = (int *)&i;//强制转换
*p = 80;
cout < <*p < <endl;
cout < <i < <endl;
cout < <p < <" " < <&i < <endl;
运行结果是*p的值为80,而i的值还是40,不知道是为什么,有哪位高手解答下,谢谢
[/Quote]
*p赋值为80,当然*p的值就是80了,i是个const常量没法改变再说你也没有改变,所以还是40
int *p = (int *)&i;这句话只是将i的地址赋值给了*p而已,而p并没有指向i的地址。
Mougou
2008-10-31
打赏
举报
回复
翻翻今天上午的帖子,我刚刚回答过
那些只有
几行
,但是却非常牛逼的
代码
!
本文介绍了一些有趣的编程技巧,包括洗牌算法、睡眠排序、一个简单的AI核心
代码
等,还
探讨
了一个神秘数字0x5f375a86在反平方根算法中的应用。
如何解决spark开发中遇到需要去掉文件前
几行
数据的问题
本文介绍如何处理Spark开发中遇到的需要忽略文件开头
几行
数据的问题。通过
代码
示例展示了两种解决方案:利用`zipWithIndex`与过滤,以及利用Linux命令删除前
几行
。还
探讨
了`rdd`前
几行
定义和`repartition`、`coalesce`对数据顺序的影响。
几行
代码
,优雅的避免接口重复请求!同事都说好!
本文介绍如何使用防抖、节流技术避免前端重复请求,并
探讨
更高效的请求锁定及axios.CancelToken方法。
关于“
几行
代码
”
本文通过一个面试小故事,
探讨
了在软件开发中核心
代码
的重要性,并强调理解核心
代码
比简单追求
代码
行数更为关键。
几行
代码
,网盘链接提头来见!
本文讲述了作者如何使用Python通过正则表达式帮助女友从文本中批量提取百度网盘链接和提取码,创建简易GUI界面提高工作效率,并
探讨
了知识积累在解决问题中的重要性。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章