操作c = a +++ b是什么意思?

下面的代码让我感到困惑

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。 有人可以解释为什么是这样吗?

它被parsing为c = a++ + ba++表示后增量,也就是在取a的值之后的增量来计算a + b == 2 + 5

不要这样写代码。

最大的蒙克规则适用于这样的expression,据此,expression式被parsing为:

 c = a++ + b; 

也就是说, a是后递增的( a++ ),所以a的当前值(之前后递增)用于b +运算。

a ++是post递增的,即expression式取a的值, 然后加 1。
c = ++ a + b会做你所期望的。

这是一个糟糕的编程风格的例子。

这是相当不可读的,但它后增加a所以它总结a b的当前值,然后增加a

在expression式之后,++会被评估。

c = ++ a + b; 会给你你的想法。

后增量运算符a ++会在expression式中计算a的值后更改tge的值。 由于a的原始值是2,这就是用来计算c的值; 在评估++之后,a的值被改变以反映新的值。

a ++ + b ..it给出结果7,并且在a的expression式值由于后增量运算符而更新为3之后

根据最长匹配规则,它在编译器的词法分析阶段被parsing为++ ++ b。 因此产生的输出。