使用结构的指针数组

时间:2018-07-05 15:57:37

标签: c arrays pointers struct

我正在尝试创建另一个结构的指针数组。我希望能够使用以下命令访问我分配的每个块: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;
}

1 个答案:

答案 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将存储您在数组中分配的地址。