указатели в c- "это указатель; вы имели в виду использовать '->'?" - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь назначить новое значение для поля во вложенных структурах, используя указатель, но я продолжаю получать ошибку компиляции в заголовке, вот мой код:

    struct Territory{
int x1;
int x2;
int y1;
int y2;
};

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

};
typedef struct Territory* pTerritory;
typedef struct Country* pCountry;`struct Territory 
ter_for_country;
struct Country new_country;
pCountry country_pointer;
country_pointer = &new_country;

ter_for_country.x1 = 3;
ter_for_country.x2 = 3;
ter_for_country.y1 = 3;
ter_for_country.y2 = 3;

new_country.numCities=2;
new_country.countryTerr = &ter_for_country;

теперь предположим, что я хочу изменить "x1 "из new_country с помощью указателя" country_pointer ", как бы я это сделал?Я пытался:

country_pointer->countryTerr->x1 = 25;

но я получаю ошибки, вы можете помочь?спасибо

Ответы [ 2 ]

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

Элемент 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;
0 голосов
/ 21 ноября 2018

У вас слишком много указателей одного уровня: pTerritory определен как указатель на struct Territory, а в struct Country вы делаете countryTerr указатель на pTerritory.Это дает вам указатель на указатель, где вы хотите указатель на структуру.Решение: замените countryTerr на тип pTerritory (вместо pTerritory *).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...