语法小理解: a++ 和 ++a 的区别

2017-10-25

    这是一个初级的自增(自减同理)运算符的问题,但很多人(包括我也)不是一开始就正确地理解了

    初学编程语言时一定会遇到类似这样的问题:

    int a=1, b=1, c, d;
    c = a++;
    d = ++b;
    printf("c: %d\nd: %d\n", c, d);

    为什么c的值是1而d的值是2? 你的老师可能会告诉你: a++ 是先赋值后自增; ++a 是先自增后赋值
    这样的理解用在上面的例子中好像也没什么毛病,但是当你遇到这样的表达式时就蒙了:

    printf('a=%d\n', ++a) // 函数参数
    arr[++a] // 数组下标

    这里老师们可能又要换一种解释: a++ 是先使用a的值,再把a加1;++a是先把a加1后再使用这个a的值

    对于自增(自减)运算我使用了很久这样的理解并且没出过毛病,直到有一天我学到了另一种更简洁更本质的理解方式

    表达式 a++ 和 ++a 都会产生让变量a加1的副作用, a++ 返回a原来的值, ++a 返回a加1后的值

    可见简单而统一的按照 运算、表达式、返回值 的理解方式来理解语法规则比记一堆特例要简单得多

    标签: 语法