在 C 和 C++ 中,逗号 (, ) 可以在两种情况下使用:
1) 逗号作为运算符:
逗号运算符(由记号, 表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)。逗号运算符在所有 C 运算符中具有最低优先级,并充当序列点。
/* comma as an operator */
int i = (5, 10); /* 10 is assigned to i*/
int j = (f1(), f2()); /* f1() is called (evaluated) first followed by f2().
The returned value of f2() is assigned to j */
2) 逗号作为分隔符:
当与函数调用和定义、函数类宏、变量声明、枚举声明和类似结构一起使用时,逗号充当分隔符。
/* comma as a separator */
int a = 1, b = 2;
void fun(x, y);
不应将逗号用作分隔符与用作运算符混淆。例如,在下面的语句中,可以按任意顺序调用 f1() 和 f2()。
/* Comma acts as a separator here and doesn't enforce any sequence.
Therefore, either f1() or f2() can be called first */
void fun(f1(), f2());
您可以尝试以下程序来检查您对 C 中逗号的理解。
// PROGRAM 1
#include <stdio.h>
int main()
{
int x = 10;
int y = 15;
printf("%d", (x, y));
getchar();
return 0;
}
// PROGRAM 2: Thanks to Shekhu for suggesting this program
#include <stdio.h>
int main()
{
int x = 10;
int y = (x++, ++x);
printf("%d", y);
getchar();
return 0;
}
// PROGRAM 3: Thanks to Venki for suggesting this program
#include <stdio.h>
int main()
{
int x = 10, y;
// The following is equivalent
// to y = x + 2 and x += 3,
// with two printings
y = (x++,
printf("x = %d\n", x),
++x,
printf("x = %d\n", x),
x++);
// Note that last expression is evaluated
// but side effect is not updated to y
printf("y = %d\n", y);
printf("x = %d\n", x);
return 0;
}
代码中的以下表达式:
a = 2, 3, 4;
被评估为:
(((a = 2), 3), 4);
这是因为赋值运算符的优先级高于逗号运算符。
#include <iostream>
using namespace std;
int main()
{
int a = 5;
a = 2, 3, 4;
cout << a;
return 0;
}
3) 逗号运算符代替分号。
我们知道,在 C 和 C++ 中,每条语句都以分号结束,但在满足以下规则后,逗号运算符也用于结束语句。
- 变量声明语句必须以分号结束。
- 声明语句后的语句可以用逗号结束。
- 程序的最后一条语句必须以分号结束。
例子:
#include <iostream>
using namespace std;
int main()
{
cout << "First Line\n",
cout << "Second Line\n",
cout << "Third Line\n",
cout << "Last line";
return 0;
}
输出:
First Line Second Line Third Line Last line
尽量不要混淆逗号作为分隔符和逗号作为运算符。示例:
int a = 4, 3;
这将产生一个错误,因为在这种情况下,逗号作为声明发生时的分隔符。所以错误更少的代码如下:
诠释一个;
a = 4,3;
现在存储在 a 中的值将是 4。
此外,以下是有效的,
int a =(4, 3);
这里,3 存储在 a 中。