
int数组[ROW] [列] = {0};
我全为零,但具有以下项之一的数组
int数组[ROW] [列] = {1};
我不了解一个值的所有数组. 默认值仍为0.
为什么会出现这种情况,如何初始化全1?
编辑: 我刚刚了解到memset的值为1,每个字节设置为1,所以每个数组单元的实际值不是1,而是16843009. 如何将其设置为1?
解决方案
您得到此行为,因为int数组[ROW] [column] = {1}并不意味着它将成为所有项目之一. 让我尝试逐步解释它的工作原理.
初始化数组的清晰,显而易见的方法是:
的#define行2
#定义第2列int数组[ROW] [列] =
{
{0,0},
{0,0}
};

但是,C允许您忽略某些项目的数组(或结构/联合). 例如,您可以编写:
int数组[ROW] [列] =
{
{1,2}
};
这意味着第一个元素1和2被初始化,并且元素的其他部分好像具有静态存储持续时间. C语言中有一条规则,规定程序员没有明确初始化所有静态存储持续时间的对象,而必须将其设置为零.
因此,在上面的示例中,第一行设置为1,2,而下一行设置为0,0,因为我们没有给它们提供任何显式值.
接下来,在C中允许使用宽松的松散样式规则. 第一个实例也可以编写
int数组[ROW] [列] = {0,0,0,0};
但是,这当然是一种较差的样式,因此很难阅读和理解. 但是,此规则很方便,因为它允许我们编写
int数组[ROW] [列] = {0};
这意味着: 第一行中的第一列被初始化为0,因为如果它们具有静态存储周期,则所有其他项都将其设置为0
所以,如果您尝试

int数组[ROW] [列] = {1};
这意味着第一行中的第一列被初始化为1,而所有其他项都被设置为零
本文地址: IT之家»用一个值初始化整个2D阵列
问题
带有以下声明
int array[ROW][COLUMN]={0};
我得到的数组全为零,但下面的全为
int array[ROW][COLUMN]={1};
我没有得到所有值都为1的数组. 默认值仍为0.
为什么会出现这种情况,以及如何用全1初始化?

编辑: 我刚刚了解到,使用值为1的memset会将每个字节设置为1二维数组初始化规则,因此每个数组单元的实际值不会为1,而是16843009. 如何将其设置为1?
解决方案
您得到此行为,因为int数组[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,并将所有其他项设置为零”.
本文地址: IT之家»初始化整个二维数组和一个值

扫一扫并关注IT家
微信公众号搜索“ IT之家”,并选择关注数百万开发商
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-186249-1.html
瞧你自己那点出息