i=3,j=(++i)+(++i)+(++i);为什么在VC++6.0里运行j的值是16?

simonqsm 2009-03-25 08:31:11
#include<stdio.h>
void main(){
int i=3,j;
j=(++i)+(++i)+(++i);
printf("%d\n",j);

}
...全文
282 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
friend_880 2009-04-01
  • 打赏
  • 举报
回复
经典
MARK
luozhaoyang 2009-03-26
  • 打赏
  • 举报
回复
8楼兄弟说的很好,顶一个!
cheidtf 2009-03-25
  • 打赏
  • 举报
回复
项目开发中写程序绝不能这样.
毛病贼多.
rjianfeili 2009-03-25
  • 打赏
  • 举报
回复
我觉得应该是 先++i 3次 得6后再相加 就是18
zhangyq73 2009-03-25
  • 打赏
  • 举报
回复
不同的编译器运行的结果不一样
Colin_ren 2009-03-25
  • 打赏
  • 举报
回复
8楼的兄弟说的很对,前段时间我才研究了这个问题
sys0009 2009-03-25
  • 打赏
  • 举报
回复
。。。
貌似没啥意思得说
wyswyg63 2009-03-25
  • 打赏
  • 举报
回复
晕哦,未定义的情况,不必深究啊!
刘小西Beta 2009-03-25
  • 打赏
  • 举报
回复
果然~
xylicon 2009-03-25
  • 打赏
  • 举报
回复
在VC6中, j=(++i)+(++i)+(++i);
相当于 ( (++i) + (++i) ) + (++i)
在第一个 + 操作中,必须要求出2个i的值才能进行计算,所以就要等第二个i=5的时候,也就是2个i都为5的时候,再做+的操作,这个时候第一个括号括起来的+操作就算出结果是10然后保存在一个临时变量中。然后用这个临时变量10 再与后面那个i(这个时候i变成了6)相加,结果自然就是16了。
向良玉 2009-03-25
  • 打赏
  • 举报
回复
tc里只要记住++i 为先加, i++是后加就可以了
所以j=6+6+6=18
wcl19870102 2009-03-25
  • 打赏
  • 举报
回复
不同的编译器又不同的结果,不必计较!!!
simonqsm 2009-03-25
  • 打赏
  • 举报
回复
按照什么逻辑出来能是16呀,18我到是能解释
  • 打赏
  • 举报
回复
VC9 结果18
G++ 4.2.1结果16
CodeGear C++ 6.10 结果18

按照那个结果解释
sagegz 2009-03-25
  • 打赏
  • 举报
回复
VS2005结果是18.
因为后缀自增++运算符的优先级是高于算术运算符号+的.
所以++,再++,再++,3->4->5->6
最后j=6+6+6=18.
bao001001 2009-03-25
  • 打赏
  • 举报
回复
15
yangch_nhcmo 2009-03-25
  • 打赏
  • 举报
回复
这种写法其结果是未定义的,在不同的编译器中会有不同的结果.

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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