二维数组的初始化值

6
我正在开发一个使用数组的程序,我试图弄清楚以下问题。
首先,对于下面的数组声明,scores [2] [2]元素中存储的值是什么?
int scores[3][3] = { {1, 2, 3} };

除此之外,对于这个数组声明,scores[2][3] 元素存储的是什么值?

int scores[5][5] = {5};

请问有人可以为我解释一下吗?


1
在这种情况下,所有未设置的值都被设置为0 - juanchopanza
试试看。只需要三行代码... - Pete Becker
2个回答

6
int scores[3][3] = { {1, 2, 3} };

等价于:

int scores[3][3] = { {1, 2, 3}, {0, 0, 0}, {0, 0, 0}};

另一篇文章与此相似。你知道答案。

我明白了那部分,唯一让我不确定的是如何识别这个值。 - michael m
如果您已掌握了这部分内容,那么其余的就很容易了。我认为值得一提的是,索引从0开始。 - Yu Hao
所以,既然我有一个二维数组(行/列网格),但只指定了第一行,那么其余的就会被初始化为零,所以我应该期望代码写入零,对吗? - michael m
只要有初始化器,所有未明确初始化的元素都会被初始化为“0”。例如,“int scores[3][3] = {}”将所有元素设置为“0”。@michaelm - Yu Hao

3

数组索引以零为基础。

这意味着对于: int foo[3] = {10, 20, 30};

  • foo[0] 是 10
  • foo[1] 是 20
  • foo[2] 是 30

对于多维数组,您应该把它们看作是数组的数组。

所以这将创建一个包含两个 int[3] 的数组: int foo[2][3] = {{10, 20, 30}, {40, 50, 60}};

  • foo[0][0] 是 10
  • foo[0][1] 是 20
  • foo[0][2] 是 30
  • foo[1][0] 是 40
  • foo[1][1] 是 50
  • foo[1][2] 是 60

C语言支持部分初始化。它将默认所有未初始化的值为0。

所以如果您这样做: int foo[3] = {5};

  • foo[0] 是 5
  • foo[1] 是 0
  • foo[2] 是 0

同样地,对于多维数组: int foo[2][3] = {5};

  • foo[0][0] 是 5
  • foo[0][1] 是 0
  • foo[0][2] 是 0
  • foo[1][0] 是 0
  • foo[1][1] 是 0
  • foo[1][2] 是 0

1
@michaelm 不要忘记如果其中一个回答了你的问题,请接受Yu Hao或我的回答。 - Jonathan Mee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接