我有一个典型的结构(ECU_t),其中的成员被认为是指向struct的指针。现在我想做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
}
答案 0 :(得分:1)
engine是输出的成员,而water_temp是引擎的成员。
因此您可以执行以下任一操作
(output->engine)->water_temp = NORMAL
OR
output->engine->water_temp = NORMAL
as->是左优先运算符。
答案 1 :(得分:0)
尝试
output->engine->water_temp = NORMAL;
output
是指向ECU_t
的指针,它使output->engine
指向Engine_t
的指针,然后output->engine->water_temp
是其期望的成员(作为左值) ),我们可以为其分配值NORMAL
请注意,output->(engine->water_temp)
在这里没有意义,因为根据括号,您必须首先评估engine->water_temp
,但是engine
没有定义。甚至在那之后,您仍将尝试访问*output
的成员,该成员不是由其名称给出的,而是由评估engine->water_temp
的结果给出的。