下面的代碼具有我困惑操作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.空格和括號是免費的,在這種情況下將使每個人的生活更輕鬆。 –