running man2013权志龙:c语言的问题

来源:百度文库 编辑:高考问答 时间:2024/05/06 22:44:02
main()
{int i=3;
printf("%d",(i++*++i+i--*--i));}的答案是30

main()
{int i=3,k;
k=i++*++i+i--*--i;
printf("%d",k);} 的答案是18这两个程序的结果为什么不一样呢??

各个编译器编译顺序不同。
main()
{int i=3;
printf("%d",(i++*++i+i--*--i));}
在gcc和vc++中是25

这样的程序本身就是有问题的,第一个输出因为各编辑器对赋值的处理方向不一样,TC好像是从右到左,所以就出现你说的问题,具体在谭浩强的C程序设计第二版里面有讲,你可以翻书看看,谭生建议不要写这样的代码,因为这个移植性不好,而且在每个编译器上的结果都不同