让变量自身加一或减一是一种常用的运算,C语言提供了增量与减量运算符支持这些操作。
增量运算(++)
让变量自身加1,可以这样实现:
int size = 3;
size = size + 1; // 语句执行后 size 值为 4
size += 1; // 语句执行后 size 值为 5
使用增量运算符(++)可以更便捷的完成工作,增量运算也称为自增运算,有两种语法形式。
前置++
:运算符在操作数之前,语句执行后操作数自增1,如 ++a;后置++
:运算符在操作数之后,语句执行后操作数自增1,如 a++;
现在,上面的代码可以这样改写。
int size = 3;
++size; // 前置++,语句执行后 size 值为 4
size++; // 后置++,语句执行后 size 值为 5
乍一看,好像没什么区别;但当它们应用到复杂表达式或语句中时,二者的区别才得以显现。
#include <stdio.h>
int main()
{
int a = 1, b = 1;
int ap, bp;
ap = a++;
bp = ++b;
printf("a\t b\t ap\t bp\t\n");
printf("%d\t %d\t %d\t %d\t", a, b, ap, bp);
return 0;
}
这两种模式的区别在于值的增加这一动作发生的时间点是不同的。
/* ap = a++; // 后置++:使用a的值之后改变a,相当于下面的语句。
*---------------------------------------------------------------*/
ap = a; // 先使用a的值执行赋值操作
a++; // 再让a自增1
/* bp = ++b; // 前置++:使用b的值之前改变b,相当于下面的语句。
*---------------------------------------------------------------*/
++b; // 先让b自增1
bp = b; // 再使用b的值执行赋值操作
让情况再复杂一点,假设a的初始值始终为1,我们分解一下p的值。
/* p = 2 * ++a;
*---------------------------------------------------------------*/
++a; // a(2)
p = 2 * a; // p(4)
/* p = 2 * a++
*---------------------------------------------------------------*/
p = 2 * a; // p(2)
a++; // a(2)
观点:将增量运算符应用于复杂表达式,会使程序不易阅读,不建议使用!
减量运算(–)
减量运算也称为自减运算,运算符(–)使变量自减一,也有前缀与后缀运算之分。
#include <stdio.h>
int main()
{
int a = 1, b = 1;
int va, vb;
va = a--;
vb = --b;
printf("a\t b\t va\t vb\t\n");
printf("%d\t %d\t %d\t %d\t", a, b, va, vb);
return 0;
}
练习
- 增量运算符属于单目还是双目运算符?
- 对字符’A’应用增量运算符,打印出字符’ABCD’。
- 编写程序验证一下
++
与--
在double类型上是否可行。