Postfix前缀?

时间:2015-03-28 16:12:17

标签: c operators

我已在herehere中读到后缀(es)在前缀之前。

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

但是这个代码输出将是5,6。这有什么意义呢?

1 个答案:

答案 0 :(得分:2)

您的链接中讨论的是运营商优先级。这不会影响后期增量的工作。后增量运算符在计算表达式后增加值。

  

后增量运算符用于将变量的值增加为   在完全执行表达式之后立即增加   使用。

这意味着即使你有像

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

++i将被计算(i变为1)并计算表达式,因此k获取值6,并在赋值{{ 1}}到6k的效果到位,j++变为j

  

运算符优先级确定运算符的分组方式   不同的运算符在一个表达式中出现。例如,'   *'优先级高于' +'。因此,表达式a + b * c表示乘以b和c,然后将a加到产品上(即a +   (b * c))。

但优先级不会改变后缀增量的工作。它只会在计算表达式后增加该值(该部分独立于它的优先级)。

我将给你一个简单的例子(希望你知道使用指针)

6

此输出为

#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 );
  }

您可以参考此ideone链接进行校对。

现在让我们解释一下。 *p = 22 x = 11 的优先级高于++,因此代码与

相同
*

也就是说,x = * ( p++ ); 将使指针++指向数组的下一个地址,但该部分仅在计算表达式后完成(换句话说,在值之后) p被分配到*p)。因此,在表达式之后,x将指向下一个地址,其值为p,而22仍将获得值x

希望这说清楚(这个例子可能有点难以理解,但它是了解这一点的最好之一)