如何访问此结构体的成员

问题描述 投票:0回答:1

我有一个结构,大致如下:

typedef struct first_struct {
  const char *name;             /**name */
  second_struct_t *priv; /**private data */
} first_struct_t;

我只需使用

即可访问
priv

first_struct_t first;
printf("priv at %p\n", first->priv);

second_struct
大致定义如下

typedef struct second_struct second_struct_t;


struct second_struct {
  uint8_t base;
  internal_type *target_member;
};

现在我想了解如何访问

target_member
。不幸的是,
first->priv->target_member
不起作用,因为我无法正确包含必要的标头,因为类型已转发。

我想过使用

addressof
,识别
target_member
的偏移量,但没有运气。

当然,一旦我有权访问

target_member
,我想访问其成员并打印值。

关于如何解决这个问题有什么建议吗?

c pointers struct
1个回答
0
投票
struct second_struct {
  uint8_t base;
  internal_type *target_member;
};

typedef struct second_struct second_struct_t;

typedef struct first_struct {
  const char *name;             /**name */
  second_struct_t *priv; /**private data */
} first_struct_t;


void foo(void) {
   first_struct_t first; // note this is not a pointer
   first_struct_t *pf = &first; // this is pointer

   second_struct_t second; // just a buffer on the stack
   first.priv = &second; // pointer should point somewhere

   printf("priv at %p\n", first.priv);
   printf("target_member at %p\n", first.priv->target_member);

   printf("priv at %p\n", pf->priv);
   printf("target_member at %p\n", pf->priv->target_member);
}
© www.soinside.com 2019 - 2024. All rights reserved.