下面的代码具有我困惑操作c = a +++ b是什么意思?
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
我期望的输出为3,5,8,主要是因为一个++装置2 1,其等于3,和3 + 5等于8,所以预期的3, 5,8。事实证明,结果是3,5,7。有人可以解释为什么会出现这种情况吗?
下面的代码具有我困惑操作c = a +++ b是什么意思?
int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);
我期望的输出为3,5,8,主要是因为一个++装置2 1,其等于3,和3 + 5等于8,所以预期的3, 5,8。事实证明,结果是3,5,7。有人可以解释为什么会出现这种情况吗?
它解析为c = a++ + b
,并且a++
意味着后递增,即增量服用a
值来计算a + b == 2 + 5
后。
请,从来没有写这样的代码。
哪个规则说明它被解析为'a ++ + b',而不是'a ++ ++ b'?标记器是贪婪的? –
我认为它必须是严格左联合的。 – Patrick87
@BlagovestBuyukliev:检查你的本地C语法或[this one](http://www.lysator.liu.se/c/ANSI-C-grammar-y.html)。 –
一个++是交递增,即表达需要的值,并然后添加 1.
C = ++ A + B会做你期望的。
a ++在表达式之后被评估。
c = ++ a + b;会给你你的想法。
这是一个糟糕的编程风格的例子。
这是相当不可读,但是其发布的增量a
所以总结的a
当前值b
事后递增a
!
后增量运算符a ++在表达式中计算a的值后更改tge值。由于a的原始值是2,这就是用来计算c的值;在评估++之后,a的值被改变以反映新值。
一个++ + B ..它给出结果7和的表情值后是更新到3,因为后增量操作者
a ++ + b评估为7而不是5.在你回答之前考虑。 –
@ desprado07感谢您的更正:D –
+1知道这被称为“最大的蒙克!” –
根据Longest Match规则,它在编译器的词法分析阶段被解析为++ ++ b。因此产生的输出。
'a ++'绝对不代表'2 + 1'。 :) – jalf
这些只是一本书中的练习,但他们让我思考。我一直在弄错它们,所以它不是生产代码或任何东西 – user595985
除非你正在编写C++语法分析器/编译器,否则你不应该写/考虑像'a +++ b'这样的表达式,稍后有人正在阅读代码可以很容易地解释为“a +(++ b)”,它将评估为8.空格和括号是免费的,在这种情况下将使每个人的生活更轻松。 –