2010-11-15 31 views
1
void main() 
int a,b,c; 
c=(a,b) 

此使用括號給c=b關於用C

c=a,b 

c=a

以上兩個原因是什麼?

+3

不要使用'void main()' - 人們對此感到不安。標準是'int main(void)'或'int main(int argc,char ** argv)'。 – 2010-11-15 04:38:15

+0

缺少主要的括號{}。 – abelenky 2010-11-16 06:13:16

回答

11

在這一行:

c=(a,b) 

括號的意思是, 「計算表達式a,b第一,然後將值賦給c」。在這種情況下,b被分配,因爲它是a,b的右側表達式。在C中,comma expressions從左到右進行評估,總體值是最右側表達式的值。

雖然在該行:

c=a,b 

分配是作爲整個左手側的第一評價,這是c=a。這是因爲相同的=運算符優先於逗號運算符,。因此,b根本不會被分配到c。它相當於:

(c=a),b 
3

在C中,逗號運算符評估第一個操作數,然後丟棄它,然後評估右操作數。所以結果是正確的操作數。它的優先級最低。

c = (a,b)

()的優先級高於,所以a,b先評估。結果是b。所以c = b。

但是當使用c = a時,b assignment =具有更高的優先級。所以c = a先評估。因此a被分配給c。

查詢this瞭解更多詳情。