首页 > 编程笔记

C语言自增(++)自减(--)运算符

C语言提供了两个特殊的运算符,通常在其他计算机语言中找不到,即自增运算符++和自减运算符--。它们都是单目运算符,运算的结果是使变量值增 1 或减 1,可以放在变量之前,称为前置运算;也可以放在变量之后,称为后置运算。它们都具有“右结合性”。

这两个运算符有以下几种形式:
++i  /*相当于i=i+1, i自增1后再参与其他运算*/
--i  /*相当于i=i-1 ,i自减1后再参与其他运算*/
i++  /*相当于i=i+1 ,i参与运算后,i的值再自增1*/
i--  /*相当于i=i-1 ,i参与运算后,i的值再自减1*/

【示例】前置加和后置加的区别:
#include <stdio.h>
int main()
{
    int a,b,c;
    a=9;
    b=++a;  /*前置加*/
    printf(" (1) a=%d   b=%d\n",a,b);
    a=9;
    c=a++;  /*后置加*/
    printf(" (2) a=%d   c=%d\n",a,c);
}
运行结果:
(1) a=10   b=10
(2) a=10   c=9

范例分析

本范例中,变量 a 开始赋初值为 9,执行 b=++a 时,相当于先执行 a=a+1=10,再将 10 赋给变量 b,然后输出此时 a、b 的值。a 的值又重新赋值为 9,执行 c=a++,相当于先执行 c=a,c 的值为 9,然后才执行 a++,即 a=a+1=10,此时 a、c 的值分别为 10 和 9。

但是当表达式中连续出现多个加号(+)或减号(-)时,如何区分它们是增量运算符,还是加法或减法运算符呢?例如:

y=i+++j;

是应该理解成 y=i+(++j),还是 y=(i++)+j呢?

在C语言中,语句分析遵循“最长匹配”原则。即如果在两个运算分量之间连续出现多个表示运算符的字符(中间没有空格),那么,在确保有意义的条件下,则从左到右尽可能多地将若干个字符组成一个运算符,所以,上面的表达式就等价于 y=(i++)+j,而不是 y=i+(++j)。

如果读者在录入程序时有类似的操作,可以在运算符之间加上空格,如 i+++j,或者加上圆括号,作为整体部分处理,如 y=i+(++j)。

优秀文章