1

->&.演算子ではなく、ユニオンアドレスで実際のユニオンメンバーにアクセスできるかどうか疑問に思っていました。それが可能な場合、それは許可されますか?

4

1 に答える 1

2

addressof操作を使用してユニオンのメモリにアクセスできます&(union)

例えば

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

void * address = &afoo;

ただし、ユニオンのポイントは、さまざまなタイプで構成されるデータの「共有」領域への透過的なアクセスを許可することです。char *データにアクセスしたい場合は、char *メンバーを使用して、その方法でデータにアクセスできます。

* addressが別のタイプであると偽って、次を使用できます。

int64_t *abar = (int64_t*)address;
printf("%llu\n", *abar);
于 2012-06-07T04:59:12.460 に答える