当我初始化一个数组时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
如果在这里使用大括号而不是第一个括号会发生什么?
当我初始化一个数组时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
如果在这里使用大括号而不是第一个括号会发生什么?
(8,9,7,67,11)
是使用逗号运算符的表达式,其计算结果为 11。其他初始化程序也是如此。因此,您只需显式初始化前两个元素,然后将所有其他元素初始化为 0。您的编译器应该警告初始化程序中缺少大括号级别。
如果您使用花括号,您a
可能会按照预期初始化 的两个组件数组。
int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
相当于(在块范围内):
int a[2][5]={11, 89};
,
是 C逗号运算符。它从左到右评估其操作数并产生右操作数的值。
在文件范围内,数组初始值设定项必须是常量,并且由于,
表达式永远不是常量表达式,因此您的数组声明无效。
因为你没有使用大括号,而是括号。你要:
int a[2][5] = { { 8,9,7,67,11 }, { 7,8,9,199,89 } };
// ^^^ ^^^^^^ ^^^
在您的原始代码中,您刚刚认识了逗号运算符,并且您实际上已经编写了int a[2][5] = { 11, 89 };
. 这是合法的,但它将所有缺失的元素初始化为零。
这是
你必须使用的概念comma operator
来初始化数组comma separator
{}
int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
here(8,9,7,67,11)
等价于11
because ofcomma operator
并且(7,8,9,199,89)
等价于89
for the same 因为逗号运算符被计算为left to right
并且最右边的值是返回的值
因此它相当于a[2][5]={11,89}
但是(8,9,7,67,11),(7,8,9,199,89)
用逗号() , ()
是comma separator