j=(++i)+(++i);

偏执的风铃 2012-09-09 11:54:48
像这类问题到底是如何计算的呢,为什么呢?如i=1时为什么是6而不是5呢,是怎样计算的呢,另如j=i+(i++);呢
...全文
1592 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-09-10
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

不要写连自己也预测不了结果的代码!
didijiji 2012-09-10
  • 打赏
  • 举报
回复
这种问题都类似于未定义问题。
dzweather 2012-09-10
  • 打赏
  • 举报
回复


在同一语句中,同一个表达式如何有两次或以上其值进行修改,则其值是不确定的。


什么是不确定:不同的机器其值可能就不一样。

因此这类尽量不要这样写。比如j=(++i)/(++i);//i修改两次,其值不确定





baichi4141 2012-09-10
  • 打赏
  • 举报
回复
这问题真是日经贴了啊……

语言标准没有规定同一个语句里多次++时的处理方式,编译器可以自行决定
你拿程序运行结果来说事没有任何意义,同样的代码换个编译器结果就不同,非要纠结为什么你用的编译器会得到这个结果你该直接查看反汇编,C++语言标准对此不负任何责任
wmxfdfj 2012-09-10
  • 打赏
  • 举报
回复
曾经我也纠结过这样的问题,可是后来等真正自己工作后才发现这都是用来考计算机等级用的,真正的开发就要简洁明了,基本上让别人看了思考不要超过3秒以上,否则宁愿多用两个等式,也不用这种算式。
xmu_才盛 2012-09-10
  • 打赏
  • 举报
回复
编译上 是 先 执行括号里面的, 然后再编译 括号外面的。。
所以 两个括号有限执行。。
iamnobody 2012-09-10
  • 打赏
  • 举报
回复
看顶置的帖子...

不要看这种垃圾书!

看国外的名著.
jinjianxinxh 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

在公司写这样的代码会被开除的~~
这是拿来考试的
[/Quote]
正解
xcyl 2012-09-10
  • 打赏
  • 举报
回复
在公司写这样的代码会被开除的~~
这是拿来考试的
smartsecuri 2012-09-10
  • 打赏
  • 举报
回复
网上看到有些公司的笔试题就爱出些这种题,妈妈的
AndyZhang 2012-09-10
  • 打赏
  • 举报
回复
这个未定义的问题,好多人问了,其实也可以参考一下表达式计算的顺序就ok了
偏执的风铃 2012-09-10
  • 打赏
  • 举报
回复
那j=(++i)+(++i)+(++i);怎么运行结果为10呢,按你说的不是应该j=i+i+i=4+4+4=12吗?疑问
fdxfdx123 2012-09-10
  • 打赏
  • 举报
回复
j=(++i)+(++i);
当i=1时;
第一个:++i=>i=2
第二个:++i=>i=3;
所以j=(++i)+(++i)=i+i=6
++i是i先++再用i

而j=i+(i++)
当i=1时;
j=i+(i++)=i+i=2
i++是i先拿来用,用完之后再++

69,371

社区成员

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

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