这条语句
int b = (a) + a++;
应该将值 8 赋给变量 b
,其中 a
最初被赋以值 4。但是,程序的输出是 9,而不是预期的 8。
我期望输出 8,因为
()
和 ++
(后)具有相同的优先级,因此根据它们的关联性规则,应首先评估 (a)
,然后评估 a++
,两者的评估结果均为 4。因此我们应该有 4 + 4
,等于“8”。
我想了解这个意外结果背后的原因。为什么输出是9而不是8?评估顺序和增量运算符的行为如何影响此结果?
代码
#include<stdio.h>
int main(){
int a,b,t;
scanf("%d",&a);
b=a;
**b = a + a++;**
printf("%d",b);
return 0;
}
语句 b=a; 使您的代码更易于阅读,如果您不这样做,以下输出将是相同的。 () 和 ++ 的优先级相同,但是,评估不是由 C 语言标准定义的。 a 的括号是不必要的,因为 a 是一个变量,并且比后置递增运算符 ++ 具有更高的优先级。但是,输出是 8 并且永远不会 9直到你使用++a。