pokedexios:关于++i和i++的问题

来源:百度文库 编辑:高校问答 时间:2024/05/06 07:03:01
int m=0,n=0,i=10;
m=(i++)+(i++)+(i++)
printf("%d",m);
m=(++i)+(++i)+(++i)
printf("%d",m);

----------------------------
1.VC中:m,n的结果分别是30,37
2.TC中:m,n的结果分别是30,39
----------------------------
有谁可以解释一下执行的过程呀?

"a++"这个式子是a加1之前的值,"++a"是a加1之后的值.
如a=0;i=0;
i=a++;//执行之后a=1,i=0;
a=0;i=0;
i=++a;//执行后,i=1;a=1;

那你的程序:
这里又有个算法就是加法:
a1=a2=a3=a4=a5=10;
b1=(++a1)+(++a1)+(++a1); //12+12+13=37
b2=((++a2)+(++a2))+(++a2); //(12+12)+13=37
b3=(++a3)+((++a3)+(++a3)); //13+(13+13)=39
b4=(++a4)+(++a4); (12+12)=24
b4+=++a4;//24+13=37
再加一个b5=((++a5)+(++a5))+((++a5)+(++a5));//(12+12)+(14+14);
不知道你找到编译器的计算规律了吗???它是在括号内计算结果,和在最左(就是最后要计算综合的那个+的两边时)才计算每一个式子的值..

++在各语言中都是一样的意思!

m=(i++)+(i++)+(i++) 结果为33
先把i的值取出相加结果为30 然后再自加所以最后m结果应为33

不同的编译器有从左到右和从右到左的的区别,所以i++和++i不能一概而论。