无法在C中声明struct里面的struct指针数组

时间:2016-07-24 11:04:52

标签: c arrays pointers struct

我想在struct中有一个数组,它将存储相同数据类型的指针(即struct map)。我查看了Stackoverflow,发现了这个:

struct map {
    int city;
    struct map **link = (struct map *)malloc(204800 * sizeof(struct map *));
}

但是我收到了这个错误: -

error: expected ':', ',', ';', '}' or '__attribute__' before '=' token    
    struct map **link = (struct map *)malloc(204800*sizeof(struct map *));

1 个答案:

答案 0 :(得分:5)

这是一个结构定义,你不能malloc或在声明中使用任何函数,因为声明没有被执行,它只是一种类型的结构类型' map'看起来应该是这样,编译器会知道在创建它的实例时应该为struct map分配多少内存。

当你想在struct map中使用成员时(例如使指针链接指向一些可行的内存段),你需要创建一个' map'在某个地方,只有这样你才能调用malloc并使链接指向生成的内存段。

解决这个问题的方法是首先声明结构如下:

struct map{
int city;
struct map **link;
};

当您在main中创建struct的实例时,您可以为链接分配空间,如下所示:

int main()
{
   struct map *temp = malloc(sizeof(struct map));
   temp->link = malloc(204800*sizeof(struct map *));
   return 0;
}