带有以下声明
int array[ROW][COLUMN]={0};
我得到全零但下面的一个数组
int array[ROW][COLUMN]={1};
我没有获得所有值的数组。默认值仍为0。
为什么会出现这种情况,以及如何用全1初始化?
编辑:我刚刚了解到,将memset
value用作1会将每个字节设置为1,因此每个数组单元的实际值不会为1而是16843009
。如何将其设置为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,并将所有其他项设置为零”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句