按地址访问工会的实际成员

时间:2012-06-07 04:49:59

标签: c pointers struct unions

我想知道是否可以通过联合地址访问联盟的实际成员,而不是->& .运营商。如果可能的话,是允许的吗?

1 个答案:

答案 0 :(得分:2)

您可以使用操作地址&(union)

访问联合的内存

e.g。

union foo {
  int32_t bar;
  int64_t baz;
} afoo;

void * address = &afoo;

但联盟的意义在于允许透明地访问由不同类型组成的“共享”数据区域;如果您希望char *访问数据,那么您可以使用char *成员,并以这种方式访问​​数据。

假装*地址是不同的类型,我们可以使用:

int64_t *abar = (int64_t*)address;
printf("%llu\n", *abar);