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