社区
C++ 语言
帖子详情
超奇怪问题
MagicCarmack
2006-04-25 11:00:41
#include<iostream.h>
void main()
{
const int x=100;
cout<< int(&x) <<endl;
int *iptr=(int*)((void*)(&x));
*iptr=200;
cout<<int(iptr)<<' '<<int(&x)<<endl;
cout<<*iptr<<' '<<x<<endl;
}
VC6.0下输出结果为
1245052
1245052 1245052
200 100
老大帮我分析一下程序
...全文
446
16
打赏
收藏
超奇怪问题
#include void main() { const int x=100; cout<< int(&x) <<endl; int *iptr=(int*)((void*)(&x)); *iptr=200; cout<<int(iptr)<<' '<<int(&x)<<endl; cout<<*iptr<<' '<<x<<endl; } VC6.0下输出结果为 1245052 1245052 1245052 200 100 老大帮我分析一下程序
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MagicCarmack
2006-04-27
打赏
举报
回复
结贴算了
大概有个眉目了
jjzhyh586
2006-04-26
打赏
举报
回复
#include<iostream.h>
void main()
{
const int x=100;
const int *p=&x;
cout<< int(&x) <<endl;
/a1/int *iptr=(int*)((void*)(&x));
/a2/*iptr=500;
/b1/int *jptr=(int*)(p);
/b2/*jptr=300;
cout<<int(iptr)<<' '<<int(jptr)<<' '<<int(&x)<<endl;
cout<<*iptr<<' '<<*jptr<<' '<<x<<' '<<*p<<endl;
}
先看调试结果。
1245052
1245052 1245052
300 300 100 300
当
b1,b2放在ai,a2前面时是
500 500 100 500
用const 声明的*p值变啦?
这个怎么解释...
难道const只是形式上的不可改变的变量?
只是不能用x=200;或*p=200;
这样的语句而已吗?
kundy
2006-04-26
打赏
举报
回复
学习!
jjzhyh586
2006-04-26
打赏
举报
回复
楼上说的对。制定编译器的时候,编译器见到X就打出初始化时候的值.COUT<<X<<ENDL;
等于
COUT<<100<<ENDL;
在看这里的解释
http://dev.csdn.net/develop/article/83/83854.shtm
rexking0
2006-04-26
打赏
举报
回复
直接对地址的操作都是可以改变的。如楼上有说,见x就输出100的可能性很大。
就像c++ 类中的私有成员,用地址的话都是可以直接访问的。
leolovefun
2006-04-26
打赏
举报
回复
先前见到有说是<< 常量折叠 >>,有点不太明白,这里有人知道是什么意思吗?
老道_
2006-04-26
打赏
举报
回复
就是上面的几位说的,const int x=100;
编译器一看到它就执行cout<<x<<endl;了,
你可以改成int x=100看看,此时cout<<*iptr<<' '<<x<<endl;输出的都是200
wengerbin
2006-04-26
打赏
举报
回复
楼上的"const int *p=&x;" 说的是 P不可改变.而对于其指向地址的内容是可变的.
cdef9108
2006-04-26
打赏
举报
回复
学习中
du51
2006-04-26
打赏
举报
回复
对x取址是那个空间,但是,见到X就进行替换。
du51
2006-04-26
打赏
举报
回复
为什么同一个地址里的内容却不一样呢?
因为对x进行了简单的替换,而不是取出来的。
MagicCarmack
2006-04-26
打赏
举报
回复
include<iostream.h>
void main()
{
const int x=100;
cout<< int(&x) <<endl;
int *iptr=(int*)((void*)(&x));//在这里的时候iptr是指向x的吧,也即地址(1245052)
*iptr=200; //这个200是不是存进地址1245052里呢?
//如果不是,那200存放在何处呢?如果是,那100又在存放在哪里呢?
cout<<int(iptr)<<' '<<int(&x)<<endl; //这里输出是同一个地址1245052
cout<<*iptr<<' '<<x<<endl; //但为什么同一个地址里的内容却不一样呢?
}
VC6.0下输出结果为
1245052
1245052 1245052
200 100
ykzhujiang
2006-04-25
打赏
举报
回复
我看了一下汇编的代码,在cout<<x的时候
直接就是push 64h 传递的值
我觉得对于这种const int可能处理方式就是能编译期确定的仍然编译期进行常量替换,剩下的才进行取址
MagicCarmack
2006-04-25
打赏
举报
回复
我现在最大的疑问就是x和iptr指向同一个地址
但是输出的内容却不一样,那个200是放在什么地方的呢?
ykzhujiang
2006-04-25
打赏
举报
回复
g++下结果类似,对于这种情况下不知道C++标准中是否对于实现方式有规定,关注一下
du51
2006-04-25
打赏
举报
回复
随编译器有所不同.
在有些编译器里const常量是类似于宏那样定义的.
只要见到x就输出100
dbx-agents-offline-windows-x64.zip
dbx-agents-offline-windows-x64.zip
建筑声学基于隔音材料技术体系与市场格局分析:2026年中国十大代表企业研究及工程应用决策支持系统构建
内容概要:本白皮书系统梳理了中国建筑声学行业的发展现状,重点围绕隔音材料的技术体系、市场格局与十大代表企业展开研究。文章厘清了隔音、吸音与防撞三大功能的概念边界,阐述了声音传播的物理机制及声学工程的材料、构造、施工与验证四层级结构;详细介绍了阻尼隔音板、隔音毡、吸音棉、减震构件、防撞软包等核心产品及其性能指标,并分析了行业标准、合规要求与工程实践中的常见误区;最后通过对广州朗音阁等十家大湾区代表性企业的并列介绍,揭示了行业“综合一体型”“材料制造型”“品牌产品型”等多元发展模式,强调系统交付能力、合规性与环保安全正成为企业核心竞争力。; 适合人群:建筑声学与隔音材料领域的工程采购方、建筑设计单位、总承包单位、行业研究者及政策监管相关人员。; 使用场景及目标:①帮助采购方科学选型,规避“以材料参数替代系统性能”等常见误区;②指导设计单位在公检法办案区、文化娱乐、医疗教育等细分场景中制定合理的声学解决方案;③为行业研究者提供市场格局、技术趋势与企业模式的客观参考;④推动企业提升合规意识与系统交付能力。; 阅读建议:读者应结合自身角色选择重点章节阅读——采购方可聚焦第一章、第三章、第五章、第八章及第九章;设计单位宜通读第一至七章;研究者建议全面研读并关注第二章市场格局与第四章技术趋势;所有读者均需注意本报告不进行企业排名,企业介绍篇幅差异不代表实力优劣,具体决策应以实地考察与合同约定为准。
【Python编程】Python容器化部署与Docker最佳实践
内容概要:本文全面解析Python应用的容器化部署技术,重点对比Docker镜像分层构建、多阶段构建(multi-stage)与distroless镜像在体积与安全性上的优化。文章从Dockerfile指令最佳实践出发,详解COPY与ADD的适用边界、RUN指令的层缓存优化、以及非root用户的安全运行配置。通过代码示例展示Python虚拟环境在容器内的正确创建方式、requirements.txt的确定性安装与pip缓存挂载、以及gunicorn/uwsgi的WSGI服务器多工作进程配置,同时介绍Docker Compose的多服务编排、Kubernetes的Deployment/Service资源定义、以及Helm Chart的版本化发布,同时介绍健康检查(healthcheck)探针、资源限制(limits/requests)的QoS保障、以及日志驱动(json-file/fluentd)的集中采集,最后给出在CI/CD流水线、蓝绿部署、自动扩缩容等场景下的容器化策略与可观测性建设。 ajfcw.net ahlxxzyy.com anesthesiology.org.cn aiyouseo.com www.aipinqi.com
【Python编程】Python事件驱动编程与观察者模式实现
内容概要:本文系统讲解Python事件驱动架构的设计与实现,重点对比回调函数、发布订阅(Pub/Sub)、信号量(Signal)三种事件通知机制在解耦程度与复杂度上的权衡。文章从观察者模式(Observer Pattern)出发,详解弱引用(weakref)在观察者注册中避免内存泄漏的技巧、事件总线(Event Bus)的同步与异步分发策略、以及Blinker库的命名信号与匿名信号差异。通过代码示例展示Django信号的请求/响应钩子(pre_save/post_delete)、Flask的before_request/after_request扩展点、以及自定义事件框架的优先级队列与取消订阅机制,同时介绍asyncio的事件循环与回调调度、RxPY的响应式流(Observable/Observer)组合操作、以及Celery任务完成信号的事件驱动触发,最后给出在插件系统、工作流引擎、实时通知等场景下的事件架构设计与性能考量。 basketzhibo.com www.beijiajx.com www.bjjhzt.com www.bjlstd.cn www.aochuang-group.com
前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-JuvNXAASPs1792072856
内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等
问题
。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;JuvNXAASPs1792072856 www.qxgjzs.com m.qirenjiaju.cn www.rdsdbj.com www.quantumedi.com m.rongweihuanbao.com
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章