操作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++ + b
, a++
表示后增量,也就是在取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。 因此产生的输出。