以下代码让我感到困惑
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
我预计输出为3,5,8,主要是因为a ++表示2 + 1等于3,3 + 5等于8,所以我预计3,5,8。事实证明结果是3,5,7。有人可以解释为什么会这样吗?
答案 0 :(得分:90)
它被解析为c = a++ + b
,a++
表示后递增,即在取a
的值后计算a + b == 2 + 5
的增量。
请从不写这样的代码。
答案 1 :(得分:39)
答案 2 :(得分:6)
a ++ post 递增,即表达式取值a和然后加1. c = ++ a + b会做你期望的。
答案 3 :(得分:2)
这是糟糕的编程风格的一个例子。
这是非常难以理解的,但它会增加a
,因此它将a
的当前值与b
相加,然后递增a
!
答案 4 :(得分:1)
在表达式之后评估a ++。
c = ++ a + b;会给你你的想法。
答案 5 :(得分:1)
后增量运算符a ++在表达式中计算a的值之后更改a的tge值。由于a的原始值是2,这就是用于计算c的值;在评估++之后,更改a的值以反映新值。
答案 6 :(得分:1)
a ++ + b ..it给出结果7,并且由于后增量运算符,a的表达式值更新为3之后
答案 7 :(得分:1)
根据Longest Match规则,在编译器的词法分析阶段,它被解析为++ + + b。因此产生了结果。
答案 8 :(得分:0)
这里c = a +++ b;表示c =(a ++)+ b;即发布增量。 在a ++中,将在下一步打印a,b和c时进行更改。 在++ a中,即前缀增加,更改将在同一步骤中发生,并且输出为8。