int i=10, j=10, k=10;
i=i+--i:
printf (" %d\n", i) ;
j=j+j+--j;
printf (" %d\n", j) ;
k=k+k+++k;
printf("%d", k) ;
为什么输出是18 29 32?
++,--在变量前面,先加一再赋值。
++,--在变量后面,先赋值再加一。
加法就是加法,++就是++
类似代码,不同编译器执行结果可能不同
在VS2010下的结果:
int i=10, j=10, k=10;
i=i+--i: //先执行--i,使得i成为9,然后执行i=i+i=9+9=18
printf (" %d\n", i) ;
j=j+j+--j; //先执行--j,使得j成为9,再执行j=j+j+j = 9+9+9 = 27
printf (" %d\n", j) ;
k=k+k+++k; //此句相当于 k=k+(k++)+k;,先执行k=k+k+k=10+10+10=30,然后执行k=k+1,最终k=31
printf("%d", k) ;
解释如上,和你的结果不一样,你的应该不是VS系列编译器
--i这种--在前的,先计算--i,再计算其它表达式。
++在变量后面的,先计算其它表达式,最后再计算++
你这个结果是devc++出来的结果吧。。
visual studio 出来的结果是 18 27 31
正常逻辑是vs的逻辑,给你解释一下vs的逻辑吧,devc++的逻辑搞不懂
i=i+--i等价于 --i,(i=9),i=i+i=9+9=18(第一个输出值)
j=j+j+--j;等价于--j(j=9);j=j+j+j=27(第二个输出值)
++运算符具有左结合性,所以k=k+k+++k就等价于 k=k+(k++)+k
k=k+k+++k;等价于 k=k+k+k(k=30),k++(k=31)(第三个输出值)
两中编译器的处理逻辑有差别