结构指针数组

时间:2018-11-21 22:44:17

标签: c pointers

所以我有3个文件:main.c,countries.h和country.c

我在国家/地区中声明了称为“国家/地区”的结构的指针。h

我已将countrys.h包含在countrys.c和main.c中

并宣布了该结构在各国的自身地位。c

国家/地区

typedef struct Country* pCountry;

国家/地区

struct Country {
    char *name;
    pCity cities;
    int numCities;
    pTerritory countryTerr;
};

现在,我想使用malloc创建Country结构的指针数组

所以我做到了:

pCountry countries_array;
countries_array = (pCountry); 
malloc(num_of_countries*sizeof(countries_array));

并为每个指针分配指针,即使使用了malloc似乎也行不通

使用[]将指针分配给数组中的元素:

countries_array[0]= new_pointer;

我得到“无效使用未定义结构国家”和“取消指向不完整的指针”,

代码有什么问题?

谢谢

1 个答案:

答案 0 :(得分:1)

看起来不错。只需将其分配给相同类型的struct Country。另外,如注释中所指出的,它应该是malloc num_of_countries * sizeof struct Country(不是指针类型),现在在下面正确地将其取消引用为sizeof(* countries_array),这也可以使用。

pCountry countries_array;
countries_array = malloc(num_of_countries * sizeof (*countries_array));
struct Country Jefferson = {"Jefferson", 1,2,3 };
countries_array[0] = Jefferson;

// don't forget to free the memory when no longer needed.
free (countries_array);

如果我们必须将指针放入此结构数组,则可以取消引用该指针,例如countries_array [0] = * pointer,或者...我们可以将countries_array声明为< em> pointers ,而不是结构数组。也许这就是您想要的。无论哪种方式,实际结构都必须在某个地方占用内存...

pCountry *countries_array = malloc(num_of_countries*sizeof countries_array);
pCountry j = &Jefferson; // `&`, "address of" operator
countries_array[0] = j; // put a `pointer` into the array...