проблемы с указателями на структуру в C - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть типичная структура (ECU_t), в которой есть члены, которые считаются указателями на структуру. Теперь я хочу сделать ECU_DoTask (). пожалуйста, помогите мне

typedef enum
{
  NORMAL,
  WARNING,
}WATER_TEMP;

typedef struct
{
  WATER_TEMP water_temp;
  uint16_t speed;
  // ... other members
}Engine_t;

typedef struct
{
  Engine_t* engine;
  ABS_t*  abs;
  // ... other members
}ECU_t;

void ECU_DoTask(ECU_t* output)
{
  output->(engine->water_temp) = NORMAL; 
  // ??? it seems to be illegal command. 
  // how can i access to water_temp
}

Ответы [ 2 ]

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

engine является элементом выходных данных, а water_temp является элементом engine.

Таким образом, вы можете сделать:

(output->engine)->water_temp = NORMAL

ИЛИ

output->engine->water_temp = NORMAL   

как -> это левый оператор приоритета.

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

Попробуйте

output->engine->water_temp = NORMAL;

output - это указатель на ECU_t, который делает output->engine указателем на Engine_t, а затем output->engine->water_temp будет его желаемым членом (как L-значение), которому мы можем присвоить значение NORMAL


Обратите внимание, что output->(engine->water_temp) здесь не имеет смысла, потому что в соответствии с круглыми скобками сначала нужно оценить engine->water_temp, но engine не определено. И даже после этого вы попытаетесь получить доступ к элементу *output, который не указан в его имени, а скорее в результате оценки engine->water_temp.

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