开发者社区> 问答> 正文

用一个值初始化整个2D数组

带有以下声明

int array[ROW][COLUMN]={0}; 我得到全零但下面的一个数组

int array[ROW][COLUMN]={1}; 我没有获得所有值的数组。默认值仍为0。

为什么会出现这种现象,以及如何用全1初始化?

问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 21:32:24 403 0
1 条回答
写回答
取消 提交回答
  • 您得到此行为,因为int array [ROW][COLUMN] = {1};这并不意味着“将所有项目都设置为一个”。让我尝试逐步解释它是如何工作的。

    初始化数组的显式,过于清晰的方法是这样的:

    #define ROW 2 #define COLUMN 2

    int array [ROW][COLUMN] = { {0, 0}, {0, 0} }; 但是,C允许您省略数组(或struct / union)中的某些项。您可以例如编写:

    int array [ROW][COLUMN] = { {1, 2} }; 这意味着将第一个元素初始化为1和2,然后将其余元素初始化为“好像它们具有静态存储持续时间”。C语言中有一条规则,规定所有未由程序员明确初始化的静态存储持续时间对象都必须设置为零。

    因此,在上面的示例中,第一行设置为1,2,第二行设置为0,0,因为我们没有为它们提供任何显式值。

    接下来,在C中有一条规则允许不固定的花括号样式。第一个例子也可以写成

    int array [ROW][COLUMN] = {0, 0, 0, 0}; 尽管这当然是不好的样式,但很难阅读和理解。但这条规则很方便,因为它允许我们编写

    int array [ROW][COLUMN] = {0}; 这意味着:“将第一行的第一列初始化为0,并将所有其他项目初始化为静态存储持续时间,即将它们设置为零。”

    因此,如果您尝试

    int array [ROW][COLUMN] = {1}; 这意味着“将第一行的第一列初始化为1,并将所有其他项设置为零”。

    2020-02-08 21:32:38
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载