逗号和C中的括号和花括号之间有什么关系?

时间:2019-07-09 19:17:55

标签: c comma parentheses curly-braces

我有以下两行,找不到很好的解释

我确实读过逗号作为运算符和分隔符的双重性质,以及括号的优先级优先级和逗号作为序列点。

int a =(3,4) // here a is 4 because comma here is an operator first a=3 , then a = 4 
int a={3,4} // here is the problem , should not a=3 and then a =4 too because comma is a sequence point or it's undefined behavior or what ?

我期望

a=4
a=4 , 
but the actual output is 
a=4 , a=3

1 个答案:

答案 0 :(得分:5)

在第一种情况下:

int a =(3,4);

使用包含逗号运算符和括号的表达式初始化变量。您正确推测这是分配给a的内容,该表达式的计算结果为4。

在第二种情况下:

int a={3,4};

使用初始化器列表初始化变量,该列表用大括号表示,逗号分隔初始化器。如果有问题的变量是结构或数组,则初始化器列表中的值将分配给每个成员。如果初始化程序多于成员,则多余的值将被丢弃。

因此,a被分配了初始化程序列表中的第一个值,即3,而值4被丢弃了。

您这样做吗?

int a[2] = {3, 4};

然后a[0]将为3,而a[1]将为4。