C语言加法和自增怎么理解?

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)(第三个输出值)

两中编译器的处理逻辑有差别