struct sample
{
int a;
char b;
float c;
int *al;
union un
{
int a;
char c;
float f;
}*ptr;
}test;
構造体メンバー 'al' と共用体メンバー a、c、f にアクセスするにはどうすればよいですか?
struct sample
{
int a;
char b;
float c;
int *al;
union un
{
int a;
char c;
float f;
}*ptr;
}test;
構造体メンバー 'al' と共用体メンバー a、c、f にアクセスするにはどうすればよいですか?
他と変わらない:
アクセスal
test.al
の値が必要な場合はal
、 で取得できます*(test.al)
。
アクセスa
, c
,f
test.ptr->a;
test.ptr->c;
test.ptr->f;
問題は、ポインターを逆参照する必要があることです。
通常、ユニオンを逆参照するためにこれを行います。
test.*ptr.a.
これに関する問題は、コンパイラが逆参照シンボルの前にドット表記を実行することです。したがって、コンパイラは、ユニオン自体ではなく、ユニオン内のフィールドを逆参照します。
この問題を解決するには、'*ptr' を括弧で囲んで、フィールドにアクセスする前に共用体を強制的に参照するようにします。このような。
test.(*ptr).a
構文を簡単にするために、これは次のようにも記述できます。
test.ptr->a