在#c 上使用“+=”

问题描述 投票:0回答:2

我不明白为什么在这段代码中,'b+='返回6而不是5。运算符'+='右端的操作应该是0.

  1. i/2 = 4
  2. a-4= 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);

}

只需使用语法理论

c operators assignment-operator pre-increment
2个回答
2
投票

在这个声明之后

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;


0
投票

当你执行

b=++a;
时,a会递增。它的值变为 5。然后,
a-i/2
5-8/2
然后 1.

© www.soinside.com 2019 - 2024. All rights reserved.