歌手任盈盈图片写真:请教一个变态的c语言问题,有关自增的

来源:百度文库 编辑:高校问答 时间:2024/04/30 06:28:24
main()
{ int i,j,m,n;
i=0;
j=0;
m=0;
n=(++m)+(++m)+(++m);
printf("%d,%d,%d\n",i,(i++)+(i++)+(i++),i);
printf("%d,%d,%d\n",j,(++j)+(++j)+(++j),j);
printf("%d,%d,%d\n",m,n,m);
getch();
}
大家帮忙看一下,小弟有两个问题需要请教:
1、(++j)+(++j)+(++j)和(i++)+(i++)+(i++)的结果以及为什么?
2、第二个printf和第三个printf的结果为什么不一样?
首先感谢魔法军团 - 见习魔法师 三级 的回答,但是您的答案是错误的,其实我的重点是第二个问题。

这是一个++i和i++何时执行,和编译器的运算顺序的问题

i++表示在用该表达式的值之后将i的数加1,因此
printf("%d,%d,%d\n",i,(i++)+(i++)+(i++),i);
所做操作可以写成:
printf("%d,%d,%d\n",i,(i)+(i)+(i),i);
i++;
i++;
i++;

先输出三个参数的值,再做参数内的表达式,所以输出结果为:0,0,0

++i表示在用该表达式的值之前将i的值加1,这里假设运算顺序为从右到左,因此所做操作可以写成

第三个参数的值=j当前的值=0

j; //j = 0
++j;//j = 1
++j;//j = 2
j+j;//第二个参数值 = 4
++j;//j = 3
第二个参数值+=j;//第二个参数值 = 7

第一个参数值=j当前的值=3

printf("%d,%d,%d\n",j,(++j)+(++j)+(++j),j);
先计算参数中的表达式,再打印,所以结果为:3,7,0

第三个printf是纯粹的打印出m和n当前的值,结果为3,7,3