массив структурных указателей - PullRequest
0 голосов
/ 22 ноября 2018

Итак, у меня есть 3 файла: main.c, country.h и country.c

Я объявляю указатель структуры, названной "Страна" в странах. H

Я включилcountry.h в странах.c и main.c

и объявил структуру своей собственной в странах.c

стран.ч

typedef struct Country* pCountry;

country.c

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

Теперь я хочу создать массив указателей структуры Country, используя malloc

, поэтому я сделал это:

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

и назначить указатели для каждого указателя, хотя malloc, кажется, работает, я не могу

назначить указатели для элементов в массиве, используя []:

countries_array[0]= new_pointer;

Я получаю «недопустимое использование undefine struct country» и «разыменование указателя на неполное»,

В чем проблема с кодом?

спасибо

1 Ответ

0 голосов
/ 22 ноября 2018

выглядит хорошо.Просто присвойте его чему-нибудь того же типа, struct Country.Кроме того, как указано в комментариях, это должен быть malloc num_of_countries * sizeof struct Country (не тип указателя), который теперь правильно разыменовывается ниже как sizeof (* country_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);

Если мы должны поместить указатель в этот массив структур, мы можем либо разыменовать указатель, например указатель country_array [0] = *, либо ... мы могли бы объявить country_array как массив указателей вместо массива структур.Возможно, это то, что вы можете хотеть.В любом случае, реальные структуры должны где-то занимать память ...

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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...