C 为什么使用指针访问的结构成员没有得到更新?

C 为什么使用指针访问的结构成员没有得到更新?,c,pointers,struct,C,Pointers,Struct,我正在处理的代码中有很多结构,由于某种原因,结构成员的值没有得到更新。我搔了很长时间的头,但找不到原因。我在这里创建了一个类似的代码,最后一行没有做任何事情 star->state.county.street->pondType = TYPE_SQUARE pondType保持为类型\无。有人能解释一下我做错了什么吗?。谢谢 int main() { typedef enum { TYPE_NONE = 0, TYPE_SQUARE =

我正在处理的代码中有很多结构,由于某种原因,结构成员的值没有得到更新。我搔了很长时间的头,但找不到原因。我在这里创建了一个类似的代码,最后一行没有做任何事情

star->state.county.street->pondType = TYPE_SQUARE
pondType保持为类型\无。有人能解释一下我做错了什么吗?。谢谢

int main()
{
  typedef enum
  {
      TYPE_NONE     = 0,
      TYPE_SQUARE   = 1,
      TYPE_ROUND    = 2,
  } PondType_t;

  typedef struct
  {
      PondType_t pondType;
  } Street_t;

  typedef enum
  {
      IDX_1 = 0,
      IDX_2 = 1,
      IDX_3 = 2,
      MAX_ID_COUNT = 3
  } CompanyID_t;

  typedef struct Company_s
  {
      const CompanyID_t id;
      volatile Street_t *street;
  } Company_t;

  Company_t companies[MAX_ID_COUNT] =
      {
          { .id = IDX_1 },
          { .id = IDX_2 },
          { .id = IDX_3 },
      };

  Company_t *star = &companies[IDX_1];
  star->street->pondType = TYPE_SQUARE;

  return 0;
}


如果这是完整的代码,那么您的街道成员将指向内存中的某个随机区域。确保指针指向的目标实际存在。比如:

Street_t street = { 0, TYPE_NONE };
//...
star->state.county.street = &street;
//...
star->state.county.street->pondType = TYPE_SQUARE;

如果这是完整的代码,那么您的街道成员将指向内存中的某个随机区域。确保指针指向的目标实际存在。比如:

Street_t street = { 0, TYPE_NONE };
//...
star->state.county.street = &street;
//...
star->state.county.street->pondType = TYPE_SQUARE;

请将您的问题显示为a。为什么将包含项放在主函数中?@klutt抱歉,这是错误的。我已经删除了它。@Someprogrammerdude我已经减少了代码。请将您的问题显示为a。为什么要将包含项放在主函数中?@klutt抱歉,这是错误的。我已经删除了它。@Someprogrammerdude我已经减少了代码,所以当我使用这行代码Company_t*star=&companys[IDX_1];时,它不是指向了一个有效的内存位置吗?初始化器{.id=IDX_1}只初始化id成员。它使street成员未初始化。所以当我使用这行代码Company_t*star=&companys[IDX_1];时,这不是指向一个有效的内存位置吗?初始化器{.id=IDX_1}只初始化id成员。它使街道成员不受约束。