2014-02-24 61 views
-4

在C運算符優先級和演變

i = 7; 
j = i++ * ++i; // outputs 64? 
根據優先級後遞增

至上所以

應該是7 * 9。指出我的錯誤。你能否給我提供一個資源,在這裏我可以詳細瞭解並瞭解這些工作是如何工作的,這就是評估和所有工作的順序。

+1

我敢說這個問題已經被問過幾百次了,對於C和C++來說。 –

+0

如果你曾經包含這段代碼(或任何類似它的代碼),你應該在你生命的一寸之內鞭打。爲什麼你會寫這樣的東西呢?而且,沒有關於「我正在學習c並想了解帖子和前綴運算符」的廢話。 – KevinDTimm

+0

@KevinDTimm它在我的一個考試中被問到。 – Ignited

回答

0

你的問題是在上面沒有順序點。見 Undefined behavior and sequence points

所以,你必須在其中的i兩個增量出現(你剛纔是否在返回的遞增數或增量之前數)的順序沒有控制權。這是未定義的行爲。

例如,它可以執行++i第一,返回8,那麼i++,也返回8,給你64.因爲它是不確定的行爲,在技術上可以得到任何結果。