## 自增运算符
### 自增、自减运算符介绍
- 在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作 供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。它们是单目运算 符,是从右向左结合的算术运算符。
### 自增、自减运算符求值过程
- 前缀表达式:++x, --x; 其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表
达式的值;即“先变后用”,也就是变量的值先变,再用变量的值参与运算。
- 后缀表达式:x++, x--; 先用x的当前值作为表达式的值,再进行自增自减1运算。即“先用
后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化。
|int num = 3|||
|--|--|--|
||++a|a++|
|表达式值|4|3|
|变量num值|4|4|
+ a++ 或者 ++a 都是表达式, 表达式是有返回值的
+ 表达式的值和变量的值不是一回事
+ a++ 或者 ++a表达式的值就是变量a的值
```
int a = 1;
int b = 100;
printf("a++ = %d\n", a++);// 先使用后操作
printf("a = %d\n", a);// 操作之后
printf("++a = %d\n", ++a);// 先操作, 后使用
b *= ++a; // 先操作, 后使用; 相当于 b *= 4
printf("a = %d\n", a);
printf("b = %d\n", b);
```
- 练习
```
i=1;
i++;
j = i++ ;
j =++i ;
j = i--;
```
> 注意
```
自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整型、实型,还是字符型 变量等,但不能用于表达式或常量。如:++(a+b), 与5++, const int N=0; N++; 等都是错误 的。 而i+++j++、++i+(++j)、++a+b++、++array[--j]等,这些都是合法的。
```
---
### 练习
```
int i = 5, j = 5, p, q;
// 5 6 7
p=i++ + i++ + i++; // p = (i++) + (i++) + (i++) // 6 7 8
q = ++j + ++j+ ++j;// q = (++j) + (++j) + (++j)
printf("%d,%d,%d,%d",p,q,i,j);
```
> 输出: 18,21,8,8
> 注意: ++, -- 优先级是2级(较高)
> ++, -- 结合性是右结合性