我已阅读this问题,我想补充说明使用逗号运算符 无法完成的内容。这让我很困惑,因为我能做到这一点:
int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;
但是当我这样做时:
int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
它给我一个编译器错误。
我想问一下逗号运算符在实际操作中的局限性是什么?
答案 0 :(得分:10)
要意识到的一点是,并非所有在C中使用逗号都是逗号运算符的实例。将第二个示例更改为语法声明:
int a0=1,a1=2,a2=3;
逗号不是运算符,它们只是在列表中分隔声明符实例所需的语法。
此外,参数/参数列表中使用的逗号不是逗号运算符。
在我看来,使用逗号运算符几乎总是一个坏主意 - 它只会导致不必要的混淆。在大多数情况下,使用单独的语句可以更清楚地完成使用逗号运算符所做的事情。
很容易想到的两个异常是在for
语句的控制子句中,并且在宏中,绝对需要将多个“事物”塞入单个表达式中,甚至只应该这样做当没有其他合理的选择时。)
答案 1 :(得分: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 };
)获得所需的结果。