2013-08-06 97 views
-3
int main() 
{ 
    int b=0,a=1;//initialize a and b 
    b=++a + ++a;// calculate assign the value of b 
    print f("%d",b); 
    return 0; 
} 
  1. b的值是多少?
  2. 它是什麼計算?
+1

這個問題和Java *中着名的* == vs等於是地球上最大的兩個問題。 – Maroun

+1

'undefined behaviour' for the win – user2485710

+0

我想知道爲什麼問題論文有這些類型的問題? – P0W

回答

0

這似乎是具有序列中的點是在表達b=++a + ++a;

即無關緊要,第一++a是否評估第一或第二++a首先計算在任一情況下a遞增兩次,然後將+運算符生效,所以最終方程式爲b = 2 + 3;b = 3 + 2,因此b = 5。

當我回家時,我會用我的C編譯器試試這個。

Blastfurnace在+操作員生效之前對兩者進行評估的評論都是正確的,現在我認爲這很明顯。

也就是說,+的優先級低於++a。可以認爲,這種說法並不含糊,因爲將評估順序(R到L或L到R,優先順序)切換爲相同的答案。

沒有人會聲稱這是寫得很好的代碼,在討論的幾個點上很有趣,但不是應該被認可的東西。

+0

...或兩側在添加之前進行評估並且結果爲「3 + 3」。無論哪種方式這個代碼是可怕的,並沒有試圖推理它。 – Blastfurnace

+0

在我的c編譯器中,b的值顯示爲6.這裏兩個共享一個名爲「a」的內存。對於第一個++ a a = 2的值,對於第二個++ a,a = 3,然後b = 3 + 3 = 6。 – Arijit

+0

@Arijit,我同意後,實際嘗試它。 – JackCColeman

相關問題