我正在尝试创建另一个结构的指针数组。我希望能够使用以下命令访问我分配的每个块:info-> array [0]并将其指向某个地方,以便我可以释放它指向的任何内容,但他的编译器说我必须取消引用它。我不确定为什么,因为该位置是一个指针,所以我也想放在那里。我没有过多地使用指针,因此我认为我的理解可能有问题。我应该怎么做,我不必取消引用,可以在数组中存储/删除内容。
#include <stdio.h>
#include <stdlib.h>
typedef struct numbers{
int num1;
int num2;
}Numbers;
typedef struct info {
Numbers *array;
char firstName[50];
char lastName[50];
} Info;
int main() {
Info *info = malloc(sizeof(Info));
info->array = malloc(sizeof(Info*)*10);
Numbers *num1 = malloc(sizeof(Numbers));
info->array[0] = num1; //why dereference??
return 0;
}
答案 0 :(得分:0)
在您的示例中,info->array
是指向Numbers类型的对象的指针,而info->array[0]
被取消引用并且为Numbers类型。因此,编译器抱怨您正在将“数字的指针”分配给“数字”对象。
如果您想array
指向Numbers对象的地址,则需要使用双指针或指针指针,以便您对Info的定义为:
typedef struct info {
Numbers **array;
char firstName[50];
char lastName[50];
} Info;
然后info->array[0]
将包含一个指向Numbers类型的对象的指针,而代码中的info->array[0] = num1
将存储您在数组中分配的地址。