C 中的逗号、圆括号和大括号之间的关系是什么?

What's the relation between comma and parentheses and curly braces in C?

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

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

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

第一种情况:

int a =(3,4);

该变量使用由逗号运算符和括号组成的表达式进行初始化。此表达式的计算结果为 4,正如您正确推测的那样,这是分配给 a.

的值

第二种情况:

int a={3,4};

变量使用 初始化器列表 初始化,花括号表示,逗号分隔初始化器。如果所讨论的变量是结构或数组,则初始化列表中的值将分配给每个成员。如果初始值设定项多于成员,多余的值将被丢弃。

因此a被赋值为初始化列表中的第一个值,即3,而值4被丢弃。

你这样做了吗:

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

那么a[0]就是3,a[1]就是4。