2015-01-26 72 views
1

的考慮下面的代碼片斷:分配一個括號表達式

int a, b, c; 
a = (b = 3, c = 4, 5, 6); 

事實證明,這些行被執行後,B的值爲3,C具有值4無意外爲止。但是a有價值6.爲什麼?

此外,這是否有用?

+0

請參閱[逗號操作符','在C中做什麼](http://stackoverflow.com/q/52550/1708801) – 2015-01-27 02:35:23

回答

6

由於,運算符將所有操作數丟棄到左邊,並且因爲6是最右邊的操作數,所以它是唯一沒有被丟棄的操作數。

這是從§ 6.5.17 n1570草案

  • 逗號操作者的左操作數被評價爲空隙表達;在它的評估和右操作數的評估之間有一個 序列點。然後評估右邊的 操作數;結果有它的類型和價值。

  • 例如如由語法,逗號運算符(如在本節中描述)表明不能 出現在使用逗號分隔列表中的項目的上下文(諸如函數的參數或列表初始化的 ) 。另一方面,它可以在帶括號的表達式中使用,也可以在此類上下文中的條件運算符的第二個表達式中使用。在函數調用

    f(a, (t=3, t+2), c) 
    

    功能有三個參數,其中第二個具有值5

  • 你可以閱讀更多here

    +0

    Wikipedia有很好的例子','操作員。您可以發佈它們以進一步擴展此答案。 – haccks 2015-01-26 23:49:23

    +0

    我在草稿中添加了一個。 – 2015-01-26 23:49:40

    0

    當你使用一個分隔符(即',')在賦值語句中,它分配一個最後一個值。例如
    int i =(2,3); // i = 3; 變量我得到3的值不是2.