添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
寂寞的茶叶  ·  ios iframe ...·  2 周前    · 
大鼻子的圣诞树  ·  PHP ltrim() function ...·  1 年前    · 
淡定的葡萄  ·  css ...·  1 年前    · 
果断的风衣  ·  jQuery ...·  1 年前    · 

这种写法叫做 自加 自增 ,意思很明确,就是每次自身加 1。

相应的,也有 a-- --a ,它们叫做 自减 ,表示自身减 1。

++ -- 分别称为 自增运算符 自减运算符 ,它们在 循环结构 中使用很频繁。

自增和自减的示例:

#include <stdio.h>
int main()
    int a = 10, b = 20;
    printf("a=%d, b=%d\n", a, b);
    printf("a=%d, b=%d\n", a, b);
    printf("a=%d, b=%d\n", a, b);
    return 0;
// out
a=10, b=20
a=11, b=19
a=12, b=18

自增自减完成后,会用新值替换旧值,将新值保存在当前变量中。

自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不能针对数字,例如 10++ 就是错误的。

需要重点说明的是,++ 在变量前面和后面是有区别的:

  • ++ 在前面叫做前自增(例如 ++a)。前自增先进行自增运算,再进行其他操作。
  • ++ 在后面叫做后自增(例如 a++)。后自增先进行其他操作,再进行自增运算。
  • 自减(--)也一样,有前自减和后自减之分。

    下面的例子能更好地说明前自增(前自减)和后自增(后自减)的区别:

    #include <stdio.h>
    int main()
        int a = 10, b = 20, c = 30, d = 40;
        int a1 = ++a, b1 = b++, c1 = --c, d1 = d--;
        printf("a=%d, a1=%d\n", a, a1);
        printf("b=%d, b1=%d\n", b, b1);
        printf("c=%d, c1=%d\n", c, c1);
        printf("d=%d, d1=%d\n", d, d1);
        return 0;
    // out
    a=11, a1=11
    b=21, b1=20
    c=29, c1=29
    d=39, d1=40
    

    a、b、c、d 的输出结果相信大家没有疑问,下面重点分析 a1、b1、c1、d1:

    对于 a1=++a,先执行 ++a,结果为 11,再将 11 赋值给 a1,所以 a1 的最终值为11。而 a 经过自增,最终的值也为 11。

    对于b1=b++,b 的值并不会立马加 1,而是先把 b 原来的值交给 b1,然后再加 1。b 原来的值为 20,所以 b1 的值也就为 20。而 b 经过自增,最终值为 21。

    对于c1=--c,先执行 --c,结果为 29,再将 29 赋值给c1,所以 c1 的最终值为 29。而 c 经过自减,最终的值也为 29。

    对于d1=d--,d 的值并不会立马减 1,而是先把 d 原来的值交给 d1,然后再减 1。d 原来的值为 40,所以 d1 的值也就为 40。而 d 经过自减,最终值为 39。

  • 可以看出:a1=++a; 会先进行自增操作,再进行赋值操作;
  • b1=b++; 会先进行赋值操作,再进行自增操作。c1=--c;d1=d--; 也是如此。
  • 为了强化记忆,我们再来看一个自增自减的综合示例:

    #include <stdio.h>
    int main()
        int a = 12, b = 1;
        int c = a - (b--);  // ①
        int d = (++a) - (--b);  // ②
        printf("c=%d, d=%d\n", c, d);
        return 0;
    // out
    c=11, d=14
    

    我们来分析一下:

    执行语句①时,因为是后自减,会先进行 a-b 运算,结果是 11,然后 b 再自减,就变成了 0;最后再将 a-b 的结果(也就是11)交给 c,所以 c 的值是 11。

    执行语句②之前,b 的值已经变成 0。对于d=(++a)-(--b),a 会先自增,变成 13,然后 b 再自减,变成 -1,最后再计算 13-(-1) ,结果是 14,交给 d,所以 d 最终是 14。

    我再给读者加一个,C++ 的程序示例:

    #include <iostream>
    using namespace std;
    int main()
       int a = 21;
       int c ;
       // a 的值在赋值之前不会自增
       c = a++;   
       cout << "Line 1 - Value of a++ is :" << c << endl ;
       // 表达式计算之后,a 的值增加 1
       cout << "Line 2 - Value of a is :" << a << endl ;
       // a 的值在赋值之前自增
       c = ++a;  
       cout << "Line 3 - Value of ++a is  :" << c << endl ;
       return 0;
    // out
    Line 1 - Value of a++ is :21
    Line 2 - Value of a is :22
    Line 3 - Value of ++a is  :23
    
    #include <iostream>
    using namespace std;
    int main()
        int c;
        int d = 10;   //  测试自增、自减
        c = ++d;      // ++d 是先对 d 的值加 1,再使用 d 的值执行该行命令
        cout << "d 等于 " << d << endl;
        cout << "c 等于 " << c << endl ;
        int e = 10;   // 测试自增、自减  
        c = e++;      // e++ 是先使用 e 的值执行该行命令,执行完后再对 e 的值加 1
        cout << "e 等于 " << e << endl;
        cout << "c 等于 " << c << endl ;
        return 0;
    // out
    d 等于 11
    c 等于 11
    e 等于 11
    c 等于 10
    

    不管是自增运算符,还是自减运算符,它们只能作用于可变左值,而不能表达式,如下:

    #include<iostream>
    using namespace std;
    int main()
        int m = 3, n = 9, x;
        x = (m+n)++;        //错误,自增运算符不能作用于表达式
        x = m++;            //正确,输出结果为3
        cout << x << endl;
        x = ++n;            //正确,输出结果为10
        cout << x << endl;
        return 0;
    复制代码
    分类:
    后端
    标签: