使用增量运算符的 C 程序中出现意外结果

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

这条语句

int b = (a) + a++;
应该将值 8 赋给变量
b
,其中
a
最初被赋以值 4。但是,程序的输出是 9,而不是预期的 8。

我期望输出 8,因为

()
++
(后)具有相同的优先级,因此根据它们的关联性规则,应首先评估
(a)
,然后评估
a++
,两者的评估结果均为 4。因此我们应该有
4 + 4
,等于“8”。

我想了解这个意外结果背后的原因。为什么输出是9而不是8?评估顺序和增量运算符的行为如何影响此结果?

c operators increment post-increment
1个回答
0
投票

代码

    #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

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