2

我已经阅读了这个问题,我想补充一点,使用逗号运算符不能完成哪些事情。这让我很困惑,因为我可以这样做:

int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;

但是当我这样做时:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;

它给了我一个编译器错误。

我想问一下,逗号运算符在实际应用中有什么限制?

4

2 回答 2

10

要意识到的一件事是,并非所有 C 中逗号的使用都是逗号运算符的实例。将您的第二个示例更改为语法声明:

int a0=1,a1=2,a2=3;

逗号不是运算符,它们只是分隔列表中声明符实例所需的语法。

此外,参数/参数列表中使用的逗号不是逗号运算符。

在我看来,使用逗号运算符几乎总是一个坏主意——它只会引起不必要的混乱。在大多数情况下,使用逗号运算符完成的操作可以使用单独的语句更清楚地完成。

很容易想到的两个例外是在for语句的控制子句中,以及在绝对需要将多个“事物”塞入单个表达式的宏中,甚至只有在没有其他合理选择时才应该这样做)。

于 2010-12-28T16:01:01.797 回答
5

您可以在表达式出现的大多数地方使用逗号运算符。有几个例外;值得注意的是,您不能在常量表达式中使用逗号运算符。

在使用逗号也用作分隔符的逗号运算符时,您还必须小心,例如,在调用函数时,您必须使用括号对逗号表达式进行分组:

void f(int, bool);

f(42, 32, true);   // wrong
f((42, 32), true); // right (if such a thing can be considered "right")

你的例子是一个声明:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;

在声明中,您可以通过用逗号分隔多个事物来声明它们,因此这里也使用逗号作为分隔符。此外,您不能像这样将表达式添加到声明的末尾。(请注意,您可以使用 获得所需的结果int arr[3] = { 1, 2, 3 };)。

于 2010-12-28T16:00:15.847 回答