【发布时间】:2016-01-14 11:27:02
【问题描述】:
这是我练习册上的一道题:
如果我们写成
int a[][3]={{0},{1},{2}};,那么元素a[1][2]的值就是____。
key 表示它的值是未知的。
由于该语句不允许在函数外部编写,因此不应将矩阵简单地视为一个全局变量,它将所有元素初始化为 0。但是,我认为初始化器 {{0},{1},{2}} 等效于 {{0,0,0},{1,0,0},{2,0,0}},所以 @ 987654326@应该是0。谁错了,钥匙还是我?
PS:我写了这段代码:
#include <stdio.h>
int main()
{
int a[][3]={{0},{1},{2}};
printf("%d",a[1][2]);
return 0;
}
它的输出正好是0。
【问题讨论】:
-
int a[ ][3];与int ( *a )[3]相同,其中 a 是指向 3 个整数数组的指针。并且由于您已经初始化了zeroth元素,其余元素将被分配默认值“0”。 -
C 不支持不完整的初始化。要么全部,要么没有。
-
@SKD 不不不。
a不是指针,它是一个正确的编译时数组。大小由编译器简单地推导出,具体取决于初始化程序。a是由三个int组成的三个 数组。 -
@SKD 是这样,但是
int a[][3]那么a不是指针,它与指针不同,它不等同于指针。这是一个数组。
标签: c multidimensional-array initialization initializer-list