如何使用动态分配创建一个二维结构数组?

How do I create a 2D array of struct using dynamic allocation?

我有一个有 2 个参数的结构,我创建了一个结构类型的一维指针数组并为其分配内存。这被发送到一个函数中,其中包含要添加的值。下面的代码。

typedef struct {
    char name[LENGTH];
    double  use;
} Task;



Task *ctask;
  task = malloc(8 * sizeof(*task));

insert (Task task[], name, use){
    //does something
    task[i].name =  name;
    task[i].use = use;
}

我想知道的是如何创建结构类型指针的二维数组(大小为 8*25)。并将其发送到函数 insert().

以下是否正确:

Task **ctask;
  task = malloc(8 * sizeof(*task));

for(int i=0;i<25;i++){
    task[i] = malloc(25 * sizeof(*task));
}

当我将它发送到插入函数时,它需要更改还是我可以直接发送:

insert(task[i], name, use);

感谢任何反馈 谢谢

C中,您可以使用指向数组(长度25)的指针的数组(长度8)或数组(长度8 * 25)来表示二维数组。详情请见The C Programming Language by K&R

对于第一种方法,

Task **taskArray = (Task **) malloc(8 * sizeof(Task *));
int n;
for (n = 0; n < 8; n++) {
    taskArray[n] = (Task *) malloc(25 * sizeof(Task));
}
// access the row i, column j Task struct in the array
// taskArray[i][j]
// you will need its address/pointer to pass to insert function
// &taskArray[i][j] or taskArray[i] + j

对于第二种方法,

taskArray = (Task *) malloc(8 * 25 * sizeof(Task));
// access the row i, column j Task struct in the array
// taskArray[i * 8 + j]

关于调用Insert函数

Insert (Task task[], char *name1, double use) {
    int i = getindex(name1); 
    task[i].name = name1; 
}

根据您的代码,task 将是结构数组的 name/head 指针,您使用 task[i] 访问其 i-th 结构。

对于一维数组,您只需将名称或头指针传递给它即可。

对于使用第一种方法的二维数组,taskArray 是一个包含 8 个(深度)25 个结构(宽度)的一维数组。您可以为每个一维数组调用 Insert,只需传入它们的头指针,taskArray[i] 为 i-th。

对于使用第二种方法的二维数组,其思路类似,只是必须将一维数组的索引转换为模拟二维数组。对于 i-th.

,8 个一维数组中的每一个的头指针都是 taskArray[i * 8]