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;
}
- b的值是多少?
- 它是什麼計算?
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;
}
這似乎是具有序列中的點是在表達b=++a + ++a;
即無關緊要,第一++a
是否評估第一或第二++a
首先計算在任一情況下a
遞增兩次,然後將+
運算符生效,所以最終方程式爲b = 2 + 3;
或b = 3 + 2
,因此b = 5。
當我回家時,我會用我的C編譯器試試這個。
Blastfurnace在+
操作員生效之前對兩者進行評估的評論都是正確的,現在我認爲這很明顯。
也就是說,+
的優先級低於++a
。可以認爲,這種說法並不含糊,因爲將評估順序(R到L或L到R,優先順序)切換爲相同的答案。
沒有人會聲稱這是寫得很好的代碼,在討論的幾個點上很有趣,但不是應該被認可的東西。
...或兩側在添加之前進行評估並且結果爲「3 + 3」。無論哪種方式這個代碼是可怕的,並沒有試圖推理它。 – Blastfurnace
在我的c編譯器中,b的值顯示爲6.這裏兩個共享一個名爲「a」的內存。對於第一個++ a a = 2的值,對於第二個++ a,a = 3,然後b = 3 + 3 = 6。 – Arijit
@Arijit,我同意後,實際嘗試它。 – JackCColeman
這個問題和Java *中着名的* == vs等於是地球上最大的兩個問題。 – Maroun
'undefined behaviour' for the win – user2485710
我想知道爲什麼問題論文有這些類型的問題? – P0W