快来抢分呀,超易题目!!!

guibin 2002-09-20 10:44:48
int i=3,j;
j=i+++i+++i++;
printf("%d",j);
输出结果是,可我就是想不明白,为什么不是12?
因为我曾经做过一道这样的题:i=3 ;printf("%d",(i++)*(i++));输出结果是12,根据
右结合性可以解释之,但上面那道题我就想不通了,望高手不吝赐教。
...全文
40 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jone7318 2002-09-20
  • 打赏
  • 举报
回复
j=i+++i+++i++; ==> j=(i++)+(i++)+(i++);
因为变量优先与++结合,结果应为9
Keanu_Rocky 2002-09-20
  • 打赏
  • 举报
回复
这种问题确实没什么研究的必要,编译器怎么编译结果就是怎么样的。
sjd163 2002-09-20
  • 打赏
  • 举报
回复
不要问为什么,接受现实吧。
snipersu 2002-09-20
  • 打赏
  • 举报
回复
如果你看看这段代码的汇编代码的话就知道为什么了。我一般用vc的编译器。
hslinux 2002-09-20
  • 打赏
  • 举报
回复
i=3 ;printf("%d",(i++)*(i++));

i=3;j=(i++)*(i++);printf("%d",j);

的结果不一样的。
gmwang 2002-09-20
  • 打赏
  • 举报
回复
这是跟编译器有关
还是看看书吧
pbzhang 2002-09-20
  • 打赏
  • 举报
回复
前几天也有人问这种问题.
不过没有人回答过答案.
都说这种问题没意义.看多了只会头痛
我看有精力还是看点别的吧.不然这种东西看多了会影响你的编程风格的
blh 2002-09-20
  • 打赏
  • 举报
回复
无聊的题目,又拿闲工夫干点别的不行,哎!
Iamme 2002-09-20
  • 打赏
  • 举报
回复
别想了吧
这是把人变猪的题目
csr1103 2002-09-20
  • 打赏
  • 举报
回复
写法不对
晕ing
不同的编译器会有不同的结果
语句有二义性
guibin 2002-09-20
  • 打赏
  • 举报
回复
是呀这类问题是很无聊,但没有办法呀,别人问你你总得解释明白吧?
Behard 2002-09-20
  • 打赏
  • 举报
回复
j=i+++i+++i++;
j= 3+(i++)+(i++); //i=4;
j= 3+4+(i++); //i=5;
j=7+(i++); //i=5;
j=7+5; /i=6;
sssmmx 2002-09-20
  • 打赏
  • 举报
回复
C编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算,如i++j,将解释为(i++)+j,而不是i+(++j)。所以j=i+++i+++i++;而等效于j=(i++)+(i++)+(i++),结果为9。
C语言中类似上述这样的问题还有一些.例如,在调用函数时,实参的求值顺充,C标准并无统一规定.如 下面的函数调用:
int i=3;
printf("%d,%d",i,i++);
在有的系统中,从左至右求值,输出3,3。在有些系统中对函数参数的求值是自右而左,上面printf函数中要输出两个表达式,先输出i++,在输出i,结果是4,3。
在你的系统中
i=3 ;printf("%d",(i++)*(i++));输出结果是12
而在我的系统中
i=3 ;printf("%d",(i++)*(i++));输出结果是9。
这些问题不必死记,不同系统的处理方法也不相同,必要时试一下即可。
关于这方面的问题,谭浩强写的C程序设计说得很清楚,有机会看看吧。
cnnjyeziyin 2002-09-20
  • 打赏
  • 举报
回复
靠!又是这种问题。其实没什么用的。真的。
无非是应负考试的。
学点有用的东西吧!
eyoexply 2002-09-20
  • 打赏
  • 举报
回复
很难看

70,032

社区成员

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

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