++i 的疑问!

svcce 2012-08-29 10:49:32

int i=5;
printf("%d,",(++i)+(++i)+(++i)); //结果22
/*
但是理论上应该是 6 + 7 + 8 = 21
为什么会得到22呢!百思不得其解!
求解答~
*/
...全文
156 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2012-08-30
  • 打赏
  • 举报
回复
看顶置的帖子. 每天都有人问这种问题.
svcce 2012-08-30
  • 打赏
  • 举报
回复
vc 6
[Quote=引用 4 楼 的回复:]
用什么环境运行的,我用vs2005 答案为24
[/Quote]
huangdancs 2012-08-29
  • 打赏
  • 举报
回复
看反汇编代吗.
PS, 强烈不建议在printf函数中执行运算
xiakeliangjian 2012-08-29
  • 打赏
  • 举报
回复
用什么环境运行的,我用vs2005 答案为24
xingfeng2510 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

c++没有规定表达式的求值顺序一定是从从右到左或者是从左到右。
结果为22是你认定求值顺序一定是从从右到左。
[/Quote]

笔误,改为结果为21是你认定求值顺序一定是从从右到左。
结果为22的一种可能是i=5先加1,i=6;然后i连加了两次,变为8,之后才进行+操作,也就是8+8+6=22;
多运行几次,也许结果为其他数值,总之结果不确定。
xingfeng2510 2012-08-29
  • 打赏
  • 举报
回复
c++没有规定表达式的求值顺序一定是从从右到左或者是从左到右。
结果为22是你认定求值顺序一定是从从右到左。
svcce 2012-08-29
  • 打赏
  • 举报
回复
online wait~

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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