c语言的递增(++)运算符

229 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情

递增运算符(++)

递增运算符执行简单的任务,将其运算对象递增1.有两种方式使用运算符:

  • ++出现在变量前面,这是前缀模式;
  • ++出现在变量后面,这是后缀模式

两种模式的区别在于递增行为发生的时间不同。我们先看看它的相似处,再看不同的地方。

举一个递增的例子

#include <stdio.h>
int main(){
    int ultra = 0,super = 0;
    while (super < 5)
    {
        super++;
        ++ultra;
        printf("super = %d,ultra = %d\n",super,ultra);
    }
    return 0;
}

运算结果

Snipaste_2022-08-12_18-02-55.png

该程序两次同时计数到5,用下面两个语句分别代替程序中两个递减语句,跟下面两个语句效果是一样的:

super = super + 1;
ultra = ultra + 1;

例子中的++就是对这个语句的缩写。为了让程序更加简洁,可读性更高,更美观对它们进行简化。还有一个优点是它生成的机器语言代码效率更高,因为它和实际的机器语言指令相似。当然,现在编译器很智能,这个优势不是很明显。一个智能的编译器可以把 x =x + 1;当作 ++x

前后缀的区别

  • 看例子
#include <stdio.h>
int main(){
    int a = 1,b=1;
    int a_post,pre_b;
    a_post=a++;    //后缀:使用a的值之后,递增a
    pre_b=++b;     //前缀:使用b的值之前,递增b
    printf("a a_post b pre_b\n");
    printf("%1d %5d %5d %5d\n",a,a_post,b,pre_b);
    return 0;
}
  • 运行结果

Snipaste_2022-08-12_18-31-57.png

a,b都递增了1,但是,a_post 是a递增之前的值,而pre_b是b递增之后的值。这就是++的前缀形式和后缀形式的区别。

  • 前缀

q=2*++a; 首先,a递增1;然后,2乘以a,并将结果赋给q。

  • 后缀

q=2*a++; 首先,2乘以a,并将结果赋给q;然后,a递增1。

前缀形式和后缀形式会对代码产生影响,大家使用的时候具体问题具体分析。

递减运算符:--

每种形式的递进运算符都有一个递减运算符与之对应,用--代替++即可:

--count;   //前缀形式的递减运算符
count--;   //后缀形式的递减运算符