初始化2d数组而不指定大小

时间:2017-09-23 01:09:14

标签: c arrays multidimensional-array

我可以初始化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}};

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

3 个答案:

答案 0 :(得分:2)

  

是否可以初始化多维数组而无需先初始化其大小?

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

  

我需要能够声明数组并在以后初始化它们,并且它们将具有动态大小。

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

答案 1 :(得分:1)

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}};

这样可以正常工作。

继续尝试!这些事情只有在练习时才能知道。

快乐的编码!

答案 2 :(得分:-4)

是的,但你错过了一个逗号:

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

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