为什么在以下示例中的赋值(=)运算符之后执行后缀增量运算符(++)?根据{{3}} ++具有比=更高的优先级,因此应首先执行。
int a,b;
b = 2;
a = b++;
printf("%d\n",a);
将输出a = 2。
PS:我原则上知道++ b和b ++之间的区别,但只看运算符优先级,这些precende列表告诉我们一些不同的东西,即++应该在= 之前执行答案 0 :(得分:7)
++
。它是后递增的,意味着它计算存储的值,然后然后递增。赋值表达式右侧的任何运算符(逗号运算符除外)都在赋值本身之前进行求值。
答案 1 :(得分:3)
是的。只是在概念上,++
发生在{em>整个表达式a = b++
(具有值a
的表达式)之后,才会发生setDT(df1)
。
答案 2 :(得分:2)
运算符优先级和操作数评估的顺序是C中相当高级的主题,因为存在许多指定了自己的特殊情况的运算符。
Postfix ++就是这样一种特殊情况,由标准以下列方式指定(6.5.2.4):
结果的值计算在侧面之前排序 更新操作数存储值的效果。
这意味着编译器会将行a = b++;
转换为以下内容:
b
的值读入CPU寄存器。 (“结果的价值计算”)b
。 (“更新储值”)a
。这使得postfix ++与前缀++不同。
答案 3 :(得分:0)
增量运算符执行两项操作:向数字添加+1并返回值。后增量和预增量之间的差异是这两个步骤的顺序。因此,实际上首先执行增量,然后在任何情况下执行赋值。