C語言逗號運算子(,)

2020-07-16 10:04:20
逗號運算子是二元運算子:

表示式1 , 表示式2


逗號運算子確保運算元被順序地處理:先計算左邊的運算元,再計算右邊的運算元。右運算元的型別和值作為整個表示式的結果。左運算元只是為了副作用需要而被計算,它其值會被丟棄。在計算完左運算元之後,存在一個序列點,例如:
x = 2.7, sqrt( 2*x )

在上述表示式中,在 sqrt()函數被呼叫之前,賦值運算會首先發生。整個表示式的值是此函數的返回值。

逗號運算子的優先順序是所有運算子中最低的。因此,前述例子中的表示式 x=2.7 不需要括號。然而,如果希望逗號運算的結果用於另一個賦值運算中,就需要使用括號:
y = ( x = 2.7, sqrt( 2*x ));

上述語句會把 5.4 的平方根賦值給 y。

在初始化列表或函數參數列中的逗號是列表元素的分隔符,它不是逗號運算子。在這些地方,也可以使用逗號運算子,但必須使用括號:
y = sqrt( (x=2.7, 2*x) );

這個語句等效於前面例子的語句。逗號運算子允許將多個表示式組合成為一個表示式。這個特點使得它適用於在 for 迴圈頭部初始化或遞增多個變數,如下例所示:
int i; float fArray[10], val;
for ( i=0, val=0.25; i < 10; ++i, val *= 2.0 )
   fArray[i] = val;