初始化数组a[][]
时:
int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
然后显示数组元素。
为什么我会:
11 89 0 0 0
0 0 0 0 0
如果你在这里使用花括号而不是第一个括号会怎么样?
答案 0 :(得分:8)
(8,9,7,67,11)
是使用逗号运算符的表达式,其值为11.另一个初始化程序也是如此。因此,您只显式初始化前两个元素,然后将所有其他元素初始化为0.您的编译器应警告初始化器中缺少大括号。
如果使用花括号,则初始化a
的两个组件数组,可能是这样。
答案 1 :(得分:3)
int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
相当于(在块范围内):
int a[2][5]={11, 89};
,
是C 逗号运算符。它从左到右计算其操作数,并产生右操作数的值。
在文件范围内,数组初始值设定项必须是常量,并且由于,
表达式永远不是常量表达式,因此数组声明无效。
答案 2 :(得分:3)
因为您没有使用大括号,而是使用括号。你想要:
int a[2][5] = { { 8,9,7,67,11 }, { 7,8,9,199,89 } };
// ^^^ ^^^^^^ ^^^
在您的原始代码中,您刚认识了comma operator,并且您实际上已经编写了int a[2][5] = { 11, 89 };
。这是合法的,但它会将所有缺失的元素初始化为零。
答案 3 :(得分:1)
这是comma operator
和comma separator
的概念
您必须使用{}
初始化数组
int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
由于(8,9,7,67,11)
,此处11
相当于comma operator
并且(7,8,9,199,89)
相当于89
,因为逗号运算符的计算结果为left to right
,最右边的值是返回的值
因此它相当于a[2][5]={11,89}
但(8,9,7,67,11),(7,8,9,199,89)
但() , ()
中使用的逗号为comma separator