带有以下声明
int array[ROW][COLUMN]={0}; 我得到全零但下面的一个数组
int array[ROW][COLUMN]={1}; 我没有获得所有值的数组。默认值仍为0。
为什么会出现这种现象,以及如何用全1初始化?
问题来源于stack overflow
您得到此行为,因为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,并将所有其他项设置为零”。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。