Элемент pTerritory *countryTerr
на самом деле имеет тип struct Territory **
(обратите внимание, что pTerritory
уже является типом указателя, и вы добавляете дополнительный *
затем с помощью *countryTerr
.
Запись
struct Country{
char *name;
pCity *cities;
int numCities;
pTerritory countryTerr;
};
и ваше утверждение country_pointer->countryTerr->x1 = 25
должно скомпилироваться (и работать), как предполагалось.
В любом случае, чтобы избежать таких ловушек из-за таких "явных типов указателей", примечание *
вместе спростые типы, которые обычно понимаются и, на мой взгляд, более понятны и понятны:
typedef struct Territory{
int x1;
int x2;
int y1;
int y2;
} Territory;
typedef struct Country{
char *name;
pCity *cities;
int numCities;
Territory *countryTerr;
} Country;