3. 自增、自减运算符
自增(++)和自减(--)运算符用于对整数变量的值进行加1或减1操作。它们是一元运算符(只需一个操作数),且会直接修改操作数的值。
作用:
将变量的值增加 1 或减少 1。常用来简化替代如用 i++ 来替代 i+=1。
自增、自减运算符两种语法:
- 前置自增、自减运算。
- 后置自增、自减运算。
1、 前置自增、自减运算
作用
先对变量进行操作,然后返回变量操作后的值。
前置自增、自减运算语法:
++ 变量
-- 变量
前置自增、自减运算示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 5;
int y;
y = ++x;
printf("x: %d, y: %d\n", x, y);
y = --x;
printf("x: %d, y: %d\n", x, y);
return 0;
}
运行后的结果:
x: 6, y: 6
x: 5, y: 5
2、 后置自增、自减运算
作用
先对变量进行操作,然后返回变量操作前的值。
后置自增、自减运算语法:
变量 ++
变量 --
后置自增、自减运算示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 5;
int y;
y = x++;
printf("x: %d, y: %d\n", x, y);
y = x++;
printf("x: %d, y: %d\n", x, y);
return 0;
}
运行后的结果:
x: 6, y: 5
x: 7, y: 6
可见: 后置自增和自减运算会返回变量运算前的值。
注意:
在实际开发过程中应尽量减少在一个语句中多次使用 前置自增和自减运算 和 后置自增和自减运算。由于各个编译器的具体实现方式不同,可能会出现不可预知的结果。
如下程序在 MacOS 上使用 clang 编译器 和 Linux 下的 gcc 编辑器下运行结果会有所不同。程序如下:
文件名:myprog.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 5;
int y;
y = ++x + x++;
printf("x: %d, y: %d\n", x, y);
return 0;
}
Linux 下的 gcc 编译后运行的结果如下:
weimingze@mzstudio:~$ gcc -o myprog myprog.c
weimingze@mzstudio:~$ ./myprog
x: 7, y: 13
MacOS 下的 clang 编译后运行的结果如下:
weimz@MacBook-Pro c % clang -o myprog myprog.c
weimz@MacBook-Pro c % ./myprog
x: 7, y: 12
可见 此时 表达式 ++x + x++ 的运行结果不同。解决的方法是使用临时变量明确具体的语义。改写如下:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 5;
int y;
int temp1;
int temp2;
temp1 = ++x;
temp2 = x++;
y = temp1 + temp2;
printf("x: %d, y: %d\n", x, y);
return 0;
}
gcc 编译后和 clang 编译后的运行的结果相同,如下:
x: 7, y: 12
练习:
写一个程序,输入一个人的年龄。
- 计算并打印明年的年龄。
- 计算并打印后年的年龄。