在C中声明和初始化未知大小的2D数组

时间:2013-10-01 09:15:19

标签: c arrays

我打算创建一个从typedef struct

派生的指针的2D数组

假设typedef struct被命名为“Items”并包含字符串和整数的混合变量。

我将声明两个int变量,即typenumtypetotal。这两个整数将从零开始,并在输入数据与某个函数匹配时相加。

在数组Items *type[][]中,基本上type[][]Items *type[typenum][typetotal]但我不能这样做,因为我会在声明中将typenumtypetotal声明为零一部分。

我尝试通过Items *type[][] = {{0},{0}}初始化数组,但这会产生错误。

有什么建议吗?有人告诉我在这上面使用malloc(),但我根本就不知道如何。

*在Windows上使用Tiny C

2 个答案:

答案 0 :(得分:2)

使用动态内存分配。

Items **type;
type = malloc(sizeof (Items *) * typenum);

for (int i = 0; i < typenum; i++)
    type[i] = malloc(sizeof Items) * typetotal);

使用数组后,您需要手动释放已分配的内存。

for (int i = 0; i < typenum; i++)
    free(types[i]);

free(types);

以下是一个教程:http://www.eskimo.com/~scs/cclass/int/sx9b.html

答案 1 :(得分:0)

如果程序运行时typenumtypetotal增加,请确保使用realloc,这将重新分配更多内存并保留内容。您需要像这样分配数组的第一个维度:

myArray = realloc(myArray, sizeof(Items*) * typenum);

然后为第一个分配第二个维度:

for(...)
    myArray[i] = realloc(myArray[i], sizeof(Items) * typetotal);