int a = 5;
int b = 5;
printf("%d\n",a++);
printf("%d\n",++b);
但是这个代码输出将是5,6。这有什么意义呢?
答案 0 :(得分:2)
您的链接中讨论的是运营商优先级。这不会影响后期增量的工作。后增量运算符在计算表达式后增加值。
后增量运算符用于将变量的值增加为 在完全执行表达式之后立即增加 使用。
这意味着即使你有像
这样的陈述int i = 0 , j = 5 , k ;
k = ++i + j++ ;
++i
将被计算(i
变为1)并计算表达式,因此k
获取值6
,并在赋值{{ 1}}到6
,k
的效果到位,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
。
希望这说清楚(这个例子可能有点难以理解,但它是了解这一点的最好之一)