首先我们要先知道++i与i++的基本用法及其基本区别
++i 先自加,在使用
i++ 先使用,再自加
粗略地看,++i和i++的作用都相当于i = i+ 1,但++i和i++的区别在于++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()
{
int i = 2;
i = (i++) + (++i) + (++i) + (i++);
printf("i = %d", i);
return 0;
}
输出结果为:16
首先要知道运算方向是从左往右,因为要先运算(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++与函数一起使用,如
类型二
在函数中,运算方向为自右往左,在运算过程中要将++i替换成变量名,i++替换成数值。
#include <stdio.h>
Int main()
{
Int i = 2;
Printf(“%d %d %d %d %d”, ++i, ++i, i++, ++i,i++):
}
输出结果为 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
本文详细解析了C++中前置与后置自增运算符的使用方法及区别,并通过具体实例展示了复杂表达式的计算过程,帮助读者深入理解自增运算符的工作机制。
1559





