2012-12-31 166 views
1

可能重複:
C comma operator奇怪的變量賦值

我碰到一個行的代碼,我無法理解。我記得在某個地方看到類似的東西。

int x,y,z; 
x=(y=2,z=2*y,z+4); 

我知道分配給x的值是8.有人可以解釋我爲什麼嗎?

+2

? –

+1

@Oli:可能在一個「笨拙的C代碼」或「這就是爲什麼我愛Java的網站上,因爲你不能做這種無法理解的C代碼之類的奇怪事情。 –

回答

4

這相當於:

y = 2;  // y == 2 
z = 2 * y; // z == 4 
x = z + 4; // x == 8 

被評估由左到右,結果是正確的操作數的值的逗號運算符的操作數。

+0

這種類型的任務是否有特殊名稱? – asheeshr

+0

@AshRj:沒有..... –

+6

@AshRj是,「dontdoit assignment」 – effeffe

0

逗號運算符分隔先前的值,並且逗號的最後一項作爲結果返回,例如,

a = b,c 

將c的值分配給a。這裏的括號基本上什麼都不做,順便說一句

所以,你有兩個賦值,然後語句,其結果被返回和你在哪裏遇到這行代碼分配給X