Yas*_*med 3 c comma curly-braces parentheses
我有以下两行,找不到很好的解释
我确实读过逗号作为运算符和分隔符的双重性质,以及括号的优先级优先级和逗号作为序列点。
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 ?
Run Code Online (Sandbox Code Playgroud)
我期望
a=4
a=4 ,
but the actual output is
a=4 , a=3
Run Code Online (Sandbox Code Playgroud)
在第一种情况下:
int a =(3,4);
Run Code Online (Sandbox Code Playgroud)
该变量使用包含逗号运算符和括号的表达式初始化。当您正确推测这是分配给时,此表达式的计算结果为4 a。
在第二种情况下:
int a={3,4};
Run Code Online (Sandbox Code Playgroud)
用大括号表示的初始化器列表初始化变量,并用逗号分隔初始化器。如果有问题的变量是结构或数组,则初始化器列表中的值将分配给每个成员。如果初始化程序多于成员,则多余的值将被丢弃。
因此a,在初始值设定项列表中分配了第一个值,即3,并丢弃了值4。
你做了这个吗?
int a[2] = {3, 4};
Run Code Online (Sandbox Code Playgroud)
那么a[0]将是3,a[1]将是4。