int i,y;i=10;y=(++i)+(++i)+(++i);为什么?

Jack_Yin 2009-08-28 11:03:54
C语言:int i,y;
i=10;
y=(++i)+(++i)+(++i);
编程求得是13..37..、谁能解释下?
...全文
310 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
芒果仔 2009-08-29
  • 打赏
  • 举报
回复
真想砍了出题的人
wxdcxp 2009-08-29
  • 打赏
  • 举报
回复
个人认为也是13,37
lz00728 2009-08-29
  • 打赏
  • 举报
回复
这种问题不要去深究了, 因为这跟编译器有关!!
icansaymyabc 2009-08-29
  • 打赏
  • 举报
回复
这个的确跟编译器有关。

因为C++标准没有规定子表达式必须严格按照原始表达式的人类心理习惯求值,所以各编译器有自己决定求值时刻的自由。

完全没有优化意识的编译器按照原始顺序求值得到结果是 y=36;
你用的编译器优化程度不彻底结果是 y=37;
我用的 VC2005 优化程度极高,得到的结果就是

i=13; y=39
请按任意键继续. . .

所以出这个题目的人脑袋就有病,是该被枪毙的那种。
niimp2 2009-08-29
  • 打赏
  • 举报
回复
个人认为程序表达的是人的思想,和人的思想吻合的表达贴切
Jack_Yin 2009-08-29
  • 打赏
  • 举报
回复
问这种问题 纯属无奈
据说现在 计算机等级考试 就喜欢出这样的题目 真是悲哀
niimp2 2009-08-29
  • 打赏
  • 举报
回复

#include"stdio.h"
void main()
{
int i1,i2,i3,y1,y2,y3;
i1=i2=i3=10;
y1=(++i1);//11
y2=(++i2)+(++i2);//24,因++优先级高于+,则算2遍++i2后,i2=12,12+12=24
y3=(++i3)+(++i3)+(++i3);//+是双目运算(一次只能两个数加),不可以3个一起同时加,
//则,第一个+后,i3=12,值=24,后第2个+,24+13=37,然
printf("%d %d %d\n\r",y1,y2,y3);
}
jianglutian 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lw1a2 的回复:]
这种帖子在这个论坛叫月经贴

其实每月有好几次
[/Quote]

太精辟了
mr_leo17895 2009-08-29
  • 打赏
  • 举报
回复
跟你用的编译器有关,并且Debug和Release状态下的结果也可能不同,你可以看一下那行代码的汇编程序
fengyuwuhen1 2009-08-29
  • 打赏
  • 举报
回复
编译器的事
银河里游方舟 2009-08-29
  • 打赏
  • 举报
回复
lz,三十九吧,这个是应该跟编译器无关的,左值无i
unsv29mj 2009-08-29
  • 打赏
  • 举报
回复
我解释不了
bingyuvsbingshuang 2009-08-29
  • 打赏
  • 举报
回复
啊啊,这种问题太多了,能不能集中处理啊
lw1a2 2009-08-29
  • 打赏
  • 举报
回复
这种帖子在这个论坛叫月经贴

其实每月有好几次
zhangwenjianqin 2009-08-29
  • 打赏
  • 举报
回复
up
camelisi 2009-08-29
  • 打赏
  • 举报
回复
10分已到手。。
qepjatdwj 2009-08-28
  • 打赏
  • 举报
回复
回个帖 加十分
未定义行为
rookiesman 2009-08-28
  • 打赏
  • 举报
回复
++优先级问题
rookiesman 2009-08-28
  • 打赏
  • 举报
回复
先i自加3次变13然后再计算y=13+13+13=39
rookiesman 2009-08-28
  • 打赏
  • 举报
回复
39
加载更多回复(3)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧