后缀在前缀之前?

Postfix before prefix?

我在 here and in here 中读到后缀优先于前缀。

int a = 5;
int b = 5;
printf("%d\n",a++);
printf("%d\n",++b);

但此代码输出为 5,6。那这有什么意义呢?

你的link讲的是运算符优先级。这不会影响 post 增量的工作。 post 递增运算符增加计算中表达式后的值。

Post-increment operator is used to increment the value of variable as soon as after executing expression completely in which post increment is used.

这意味着即使你有像

这样的陈述
int i = 0 , j = 5 , k ;
k = ++i + j++ ;

会计算++ii变成1)和表达式计算,从而k得到值6,赋值后6k, j++ 的效果开始出现 j 变成 6.

Operator precedence determines how operators are grouped, when different operators appear close by in one expression. For example, ' * ' has higher precedence than ' + '. Thus, the expression a + b * c means to multiply b and c , and then add a to the product (i.e., a + (b * c) ).

但是优先级不会改变 postfix 增量的工作。它只会在计算表达式后增加值(该部分与其优先级无关)。

我给你举个简单的例子(希望你知道如何使用指针)

#include<stdio.h>
int main()
  {
    int a[] = { 11, 22 };
    int x;
    int *p = a;
    x = *p++;
    printf( " *p = %d\n",*p );
    printf( " x = %d",x );
  }

这个的输出是

 *p = 22
 x = 11

你可以参考这个ideonelink来证明。

现在让我们解释一下。 ++ 的优先级高于 * ,因此该代码将与

相同
x = * ( p++ );

++会使指针p指向数组的下一个地址,但那部分是在表达式计算完成后才做的(换句话说,在*p 的值分配给 x ) 。所以在表达式之后,p 将指向下一个地址,该地址的值为 22x 仍将获得值 11.

希望这能让人明白(这个例子可能有点难以理解,但这是最好的理解之一)