如何使用动态分配创建一个二维结构数组?
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]
我有一个有 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]