我可以初始化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}};
这个没有错误。 我的问题是,是否有可能在没有首先初始化其大小的情况下初始化多维数组?我问这个是因为对于最终的项目,我需要能够声明数组并在以后初始化它们,并且在编译时它们的大小将不知道。
答案 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}};
所有数组元素(甚至是内部数组)都需要以逗号分隔