社区
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
老大帮我分析一下程序
...全文
367
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
作业
写回复
配置赞助广告
用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
ADAMS中的过约束(
超
静定)
问题
前一段时间,有几个朋友问到ADAMS2013中的过约束(
超
静定)
问题
,笔者觉得这个
问题
很重要,所以专门开辟一篇文章阐述此
问题
。 我们知道,在理论力学中,有所谓的
超
静定
问题
。所谓
超
静定
问题
,是说,结构中未知约束...
超
声探头【信号延迟时间】
问题
求教
超
声探头【信号延迟时间】
问题
求教 本人最近在做
超
声信号检测,利用
超
声探头检测
超
声信号。遇到一件看似很简单,但现象让人头疼的事情┓(;´_`)┏,卡了许久未能解决,请教万能的大神为小弟...However,
奇怪
的事情发生
Validform_v5.3.2引发的
奇怪
问题
但是昨天用的时候出现一个
奇怪
的
问题
,这个
问题
纠结了好久
问题
描述: 使用Validform验证表单,项目要求弹出自定义提示,但是有的页面加载之后,表单所有字段不填就点击提交,弹框会调用两次!!!,但是关闭两次
openstack中的
超
配比
1.背景: 上周测试autoevacuate时,发现老是有几台机器迁移失败,查看日志发现是调度出了
问题
,内存不...查了下资料,才知道由于虚拟机的内存,磁盘,cpu等等实际使用根本达不到虚拟机规格里的数值,所以有个
超
配比的
知识点-
超
现实数
知识点-
超
实数 解决
问题
... 由于两个人的行动方案不一样了,所以不能再使用SG函数分析这个
问题
,所以,我们在这里要引入一个新的概念–
超
实数。 在
超
实数的概念里,数的定义是这样给出的:{...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章