在 C 语言中,逗号表达式(comma expression) 是一种允许你在一个表达式中串联多个子表达式的语法结构,它使用英文逗号 ,
将多个表达式连接起来,并按顺序从左到右依次计算所有表达式的值,整个逗号表达式的结果是最后一个子表达式的值。
✅ 语法形式:
表达式1, 表达式2, ..., 表达式n
🎯 关键特性:
-
从左到右依次求值;
-
只有最后一个表达式的值会作为整个表达式的结果;
-
常用于
for
循环、宏定义、复杂初始化或函数参数中。
📌 示例 1:基本使用
#include <stdio.h>
int main() {
int a; a = (1 + 2, 3 + 4);
printf("%d\n", a); // 输出 7
return 0; }
(1 + 2, 3 + 4)
中先计算1 + 2
,结果是 3(被忽略);
-
再计算
3 + 4
,结果是 7,赋值给a
。
📌 示例 2:在 for
循环中
for (int i = 0, j = 10; i < j; i++, j--)
{
printf("i = %d, j = %d\n", i, j);
}
-
i++, j--
是逗号表达式; -
每轮循环执行
i++
和j--
,但整个表达式的值是j--
的结果(通常不被使用)。
📌 示例 3:宏定义中
#define SWAP(a, b) (temp = a, a = b, b = temp)
int temp;
int main() {
int x = 5, y = 10; SWAP(x, y);
printf("x = %d, y = %d\n", x, y); // x = 10, y = 5
return 0;
}
解释:
-
SWAP(a, b)
使用逗号表达式将多条操作压缩成一个表达式。
⚠️ 注意事项:
-
逗号表达式和多个逗号分隔的变量不同,例如:
int a, b, c; // 这是声明多个变量,不是逗号表达式。
-
如果你用在函数参数中:
foo((x = 1, x + 2)); // 只会传入 x + 2 的值,x = 1 仍会执行