我不明白为什么在这段代码中,'b+='返回6而不是5。运算符'+='右端的操作应该是0.
所以运算符 '+=' 应该只添加:0.
#include<stdio.h>
int main(){
int a=4, i=8;
int b;
b=++a;
printf("%i\n",b);
b+=a-i/2;
printf("%i\n",b);
}
只需使用语法理论
在这个声明之后
b=++a;
b
和 a
将等于 5
由于前缀增量运算符 ++
.
来自 C 标准(6.5.3.1 前缀递增和递减运算符)
2 前缀++运算符的操作数的值递增。 结果是递增后操作数的新值。这 表达式 ++E 等价于 (E+=1)
所以在这个复合赋值语句中
b+=a-i/2;
可以改写成
b = b + a - i/2;
你有
b = 5 + 5 - 4
因此,您有
b
等于 6
.
您可以得到预期的结果是将变量
b
初始化为零
int b = 0;
如果要删除此声明
b=++a;
当你执行
b=++a;
时,a会递增。它的值变为 5。然后,a-i/2
是 5-8/2
然后 1.