繁体   English   中英

初始化二维数组而不指定大小

[英]Initializing a 2d array without specifying size

我可以在c中初始化一个一维数组,无论是否初始化它的大小:

int x[] = {1,2,3,4,5};
int y[5] = {1,2,3,4,5};

但是,当我尝试对二维数组执行相同操作时,例如

int x[][] = {{1,2,3},
             {4,5,6}};

我收到一个error: array type has incomplete element type 如果我在不同的行上声明和初始化数组,则会发生相同的错误。 但是,我可以在声明大小的同时对其进行初始化:

int x[2][3] = {{1,2,3},
               {4,5,6}};

这没有错误。 我的问题是,是否可以在不首先初始化其大小的情况下初始化多维数组? 我之所以这样问,是因为对于最终的项目,我需要能够声明数组并在以后对其进行初始化,并且编译时将不知道它们的大小。

是否可以在不首先初始化其大小的情况下初始化多维数组?

不,不是您提出的方式或类似的方式。

我需要能够声明数组并稍后对其进行初始化,它们将具有动态大小。

如果在编译时大小未知,则应使用a = malloc(x * y * sizeof(value_t))分配数组。 然后像a[i + j*y]一样索引它。

Is it possible to initialize a multi dimensional array without first initializing its size?

=>不,这是不可能的。

可能的情况是,您占用了数组的大小,然后使用calloc分配了内存。 我要求您使用calloc,因为这样所有数组元素都将最初初始化为0

现在,对calloc的使用将应用于:

假设您想要2D数组,那么您将可变的作为用户的输入。 然后使用

int *x;
x = calloc( ( row * column), sizeof(datatype) );

在这种情况下,数据类型将为int

简而言之,代码将显示为:

int row, column, *x;

    /* TAKING INPUT FROM THE USER */
printf("\n\t Enter the number of rows : ");
scanf("%d", &row);
printf("\n\t Enter the number of columns : ");
scanf("%d", &column);

    /* DYNAMICALLY ALLOCATING MEMORY TO x USING calloc */
x = calloc( (row * column), sizeof(int));

我希望这段代码能解决您的问题。

我还有一件事要与您分享。

在您的这段代码中:

int x[][] = {{1,2,3},
             {4,5,6}};

这种初始化只是缺少一件事,而这件事就是提到列大小,否则代码是正确的。

因此,更正您的代码:

int x[][3] = {{1,2,3},
             {4,5,6}};

这样会很好。

一直尝试! 这些类型的东西只有在练习时才能知道。

编码愉快!

是的,但是您缺少逗号:

int x[2][3] = {{1,2,3},
               {4,5,6}};

所有数组元素(甚至是内部数组)都需要用逗号分隔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM