C中的结构指针问题

时间:2018-11-18 12:47:35

标签: c pointers struct

我有一个典型的结构(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
}

2 个答案:

答案 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的结果给出的。