首先我们要先知道++i与i++的基本用法及其基本区别
++i 先自加1,再使用;
i++ 先使用,再自加1。
相同:++i和i++的作用都相当于i = i + 1。
区别:++i是先执行i = i + 1后,再使用i的值,
而i++是先使用i的值后,再执行i = i + 1。.
例:
假设 i=3;
j = ++i (i的值先变成4,再赋给j,j的值为4)
j = i++ (先将i的值赋值给j,即j为3,再执行i的自加,i为4)
类型一:
#include <stdio.h>
int main(void)
{
int i = 2;
i = (i++) + (++i) + (++i) + (i++);
printf("i = %d\n", i);
return 0;
}
输出结果为:16
首先要知道运算方向是从左往右,i = ((((i++) + (++i))+(++i))+(i++)) 。
第一步:先运算(i++) + (++i),这是一个整体,所以i的值为++i中自增过后的值,即为3。
第二步:然后与++i相加,又因此时i也要自加,所以此时i为4。
第三步:然后与i++相加,此时i不自加,i为4。
第四步:运算结果为3 + 3 + 4 + 4 = 14。
第五步:又因为式子为 i = (i++) + (++i) + (++i) +(i++);要输出i的值,所以要将式子中两个i++中后自加的1
加上,即i = 3 + 3 +4 +4 +2=16。
若在程序中加一个int m;令m= (i++) + (++i) + (++i) + (i++);
则输出结果m为14,因为题中是求m的值,所以不用考虑最后i++中的自加。
再如
i=(++i)+(i++)+(++i)+(i++)+(i++);
此时i=3+3+4+4+4+3=21
类型二
在函数中,运算方向为自右往左,在运算过程中要将++i替换成变量名,i++替换成数值。
#include <stdio.h>
int main(void)
{
int i = 2;
printf(“%d ,%d ,%d ,%d ,%d\n”, ++i, ++i, i++, ++i, i++);
return 0;
}
输出结果为 7, 7 ,4 ,7, 2
首先运算方向自右往左
1. 最右面i++替换成数值,即为2,此时i自加1为3
2. 将++i替换成变量i,此时i继续自加1为4
3. 将i++替换为数值,即为4,此时i继续自加1为5
4. 将++i替换成变量i,此时i继续自加1为6
5. 将++i替换成变量i,此时i继续自加1变为7
此时结果为(i,i,4,i,2)
又因为最后运算结果i为7,即结果为7, 7 ,4 ,7 ,2
同样若printf(“%d ,%d ,%d ,%d ,%d”, i++, ++i, i, i++,++i);
其结果为(5,i,i,3,i)
因为其中有个i,所以这一步i没有自加,所以最后i的值为6
即5,6, 6,3, 6