3. 自增、自减运算符

自增(++)和自减(--)运算符用于对整数变量的值进行加1或减1操作。它们是一元运算符(只需一个操作数),且会直接修改操作数的值。

作用:

将变量的值增加 1 或减少 1。常用来简化替代如用 i++ 来替代 i+=1

自增、自减运算符两种语法:

  1. 前置自增、自减运算。
  2. 后置自增、自减运算。

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

练习:

写一个程序,输入一个人的年龄。

  1. 计算并打印明年的年龄。
  2. 计算并打印后年的年龄。