社区
C语言
帖子详情
菜鸟问题(在线等待回答)
wangtopcool
2002-09-08 08:59:51
为什么两个输出值不同:
1 main()
{
int x=5,y;
printf("%d\n",(x++)+(x++)+(x++));
x=5;
y=(x++)+(x++)+(x++);
printf("%d\n",y);
}
2 main()
{
int x=5,y;
printf("%d\n",(++x)+(++x)+(++x));
x=5;
y=(++x)+(++x)+(++x);
printf("%d\n",y);
}
...全文
57
23
打赏
收藏
菜鸟问题(在线等待回答)
为什么两个输出值不同: 1 main() { int x=5,y; printf("%d\n",(x++)+(x++)+(x++)); x=5; y=(x++)+(x++)+(x++); printf("%d\n",y); } 2 main() { int x=5,y; printf("%d\n",(++x)+(++x)+(++x)); x=5; y=(++x)+(++x)+(++x); printf("%d\n",y); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Nokiacoco
2002-09-13
打赏
举报
回复
学习来喽
snwcwt
2002-09-08
打赏
举报
回复
to wangtopcool(王宝):
迷糊中。。。不过我觉得这种事是看编译器做了什么事情。不知道标准C++有没有对这种情况的说明,呵呵:)
猜测一下:
(x++)+(x++)+(x++):因为有括号,先计算括号内的,但都是先代入后加,所以5+5+5,
(++x)+(++x)+(++x):如wangtopcool(王宝) 所说。首先计算第一个++x,x=6,然后再加上(++x),算括号内x再自加1,x=7,然后7+7,再加上(++x)
这时x=8,7+7+8。但是感觉上这两种解释格格不入:(
gforceca1900
2002-09-08
打赏
举报
回复
http://www.c-view.org/soft/devcpp/devcpp.html
下载地址.
dev我在win XP中运行
wangtopcool
2002-09-08
打赏
举报
回复
to snwcwt(风舞影天):
dev c++可以在WIN下运行,你可以在soft.269.net中下载
wangtopcool
2002-09-08
打赏
举报
回复
晕~~
我用dev c++的结果也是15、22,想不通???请教高手!!!
snwcwt
2002-09-08
打赏
举报
回复
to gforceca1900(钙钙):
dev c++在什么OS下用的啊?是WIN的话我想要一份:)
snwcwt
2002-09-08
打赏
举报
回复
再用BC31,结果和TC20一样;BC50不知跑那儿去了:(
我觉得VC60那样处理有点不爽,有点费解,呵呵
jianweiqiu
2002-09-08
打赏
举报
回复
我现在得出后一段的结果是 22 22
gforceca1900
2002-09-08
打赏
举报
回复
我又用dev c++
结果一样
他们的答案和我不一样!!!????????????????????????????????????????
snwcwt
2002-09-08
打赏
举报
回复
vc60:
第一个程序都为15
第二个程序都为22(why,没想通)
gforceca1900
2002-09-08
打赏
举报
回复
我用vc6.0
gforceca1900
2002-09-08
打赏
举报
回复
前一个是:5+5+5=15,两个都是15.
printf执行后,x将变为8.就是连续三个自加.
后一个是:7+7+8=22,两个都是.
因为前两个数弹出,再弹出一个操作符才进行计算,所以进行两次
++x,x将会为7时才会进行加运算.
如果是
x=5;
y=(++x)+(++x)+(++x)+(++x);
则是:7+7+8+9=31
snwcwt
2002-09-08
打赏
举报
回复
TC20中:表达式(x++)+(x++)+(x++)如果是作为一个实参传递给一个function时,则是应该这样计算的: 5+6+7=18,也就是从前到后先算出X再代入下一个再计算;
y=(x++)+(x++)+(x++);这样的话则是先将5代入,5+5+5=15,然后再依次自加1
(++x)+(++x)+(++x)类似了,作为实参时:6+7+8=21
y=(++x)+(++x)+(++x),先自加然后代入:8+8+8=24
snwcwt
2002-09-08
打赏
举报
回复
这个问题和编译器有关,好象是用tc20,30就出现你所说的情况,vc和bc50就不会。原因是在向一个函数传递(++x)+(++x)+(++x)这样一个表达式和y=(++x)+(++x)+(++x)的算法不同,你可以这样试试:
main()
{
a((++x)+(++x)+(++x));
}
void a(int b)
{
printf("%d", b);
}
最开始我还以为是printf的原因,结果函数传递参数时都会这样:)
再去看看先,很久以前有个朋友问我这个问题也才搞清楚的,现在记不大清楚了
wangtopcool
2002-09-08
打赏
举报
回复
你们以为我是傻B哦,你们说的我都知道,我问的是为什么printf("%d",(++x)+(++x)+(++x))的输出值是24,而Y=(++x)+(++x)+(++x) printf("%d",y)的值是21
poplv
2002-09-08
打赏
举报
回复
很清楚呀!
(x++)+(x++)+(x++)是先将3个x加起来输出。再自加三次。
(++x)+(++x)+(++x)是先自加三次,再将自加后的3个x加起来输出!
owenszp
2002-09-08
打赏
举报
回复
一个是先用后加,另一个是先加后用!建议你好好看看书本!
gongxh
2002-09-08
打赏
举报
回复
第一个使用的是 x++ 它是使用后在增加
geeksky
2002-09-08
打赏
举报
回复
看谭的书看傻了
wangtopcool
2002-09-08
打赏
举报
回复
DEBUG我当然会,那么请问为什么第一个的输出值和Y的不一样,第一个是21,而Y值是24,WHY?
加载更多回复(3)
DIY机器人.pdf
对于网络,还是希望大家能多利用一下,很多
问题
不是非要到论坛来问的, 首先你要学会 自己找答案,比如 google、百度都是很好的搜索引擎,你只要输入关键字就 能找到很多相 关资料,别老是
等待
别人给你希望,看的出...
阿里巴巴-
菜鸟
网络和申通快递面试
今年无意中给
菜鸟
网络投了简历,本来觉得应该没啥机会,突然有一天收到邮件,告诉我阿里一位帅哥(肯定是)推荐我应聘
菜鸟
网络的职位,让我
等待
面试,很开心,于是我在工作之余开始准备面试。 过了五六天、下午三四...
Cocos开发VR
菜鸟
宝典
由知名Cocos技术讲师火云红孩儿主讲的Cocos 开发 VR的系统课程,包括硬件选择,Cocos开发VR的框架搭建,陀螺仪处理,手柄处理,打包发布等各项技术。
菜鸟
裹裹莫名出现快递_用
菜鸟
裹裹查看快递的时候,出现包裹异常
话题:用
菜鸟
裹裹查看快递的时候,出现包裹异常?什么意思?
回答
:这个时间段是顺风快递更新物流的时间,所以基本上单号都查不到的。明天早上再查就能查到了。话题:包裹异常什么意思
回答
:这个时间段是顺风快递更新...
JavaSpring
菜鸟
教程,附Java面经
在
回答
这个
问题
之前,我们先
回答
一下什么是锁。 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章