在 C 語言中,逗號(,)不僅是分隔符,更是一個具備獨特語義的運算符,稱為「逗號運算符」。它的核心功能是將兩個表達式串聯成一個「逗號表達式」,其一般形式為:
表達式1, 表達式2
求值過程遵循嚴格的左右順序:先計算表達式 1 的值(並完成其副作用),再計算表達式 2 的值,**整個逗號表達式的最終值即為表達式 2 的值**。這一特性使得逗號運算符在需要「順序執行多個運算並取最後結果」的場合極為實用,例如 for 迴圈的初始化或遞增部分。
初學者常誤以為 y = (x = a + b), (b + c); 能體現逗號表達式特性,實際上此處逗號屬於函數參數分隔符。正確示範應加上括號:
#include <stdio.h>
int main(void) {
int a = 2, b = 4, c = 6, x, y;
y = (x = a + b, b + c); // 逗號表達式:先賦值 x=6,再計算 b+c=10
printf("y=%d, x=%d\n", y, x); // 輸出:y=10, x=6
return 0;
}
此例中 y 獲得整個逗號表達式的值(10),而 x 為第一個子表達式的值(6)。
expr1, expr2, ..., exprN,整體值等於 exprN 的值。int a, b;)、函數參數列表、初始化列表中的逗號僅作分隔符,不構成逗號表達式,也無求值順序保證。for 迴圈、宏定義)。