[英]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.