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。
我有以下两行,找不到很好的解释
我确实读到过逗号作为运算符和分隔符的双重性质、括号的优先级以及作为序列点的逗号。
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。