我有一个包含2个参数的结构,我创建了一个结构类型的1D指针数组,并为它分配内存。这将发送到一个函数,其中包含要添加的值。它下面的代码。
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;
}
我想知道的是如何创建一个类型为struct(大小为8 * 25)的指针的2D数组。并将其发送到函数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);
感谢任何反馈 感谢
答案 0 :(得分:0)
在C
中,您可以使用指向数组(长度为25)的数组(长度为8)或数组(长度为8 * 25)来表示2D数组。有关详细信息,请参阅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
将是struct数组的名称/ head指针,您可以使用task[i]
访问其第i个结构。
对于1D数组,您只需通过名称或头指针即可。
对于使用第一种方法的2D数组,taskArray
是一个8(深度)的数组,其中包含25个结构(宽度)的1D数组。你可以为这个1D数组中的每一个调用Insert
,只需传入他们的头指针{i} {i}。
对于使用第二种方法的2D数组,除了必须将1D数组的索引转换为模拟为2D数组之外,它是类似的想法。对于第i个,8个1D阵列中每个阵列的头指针都是taskArray[i]
。