0
struct sample
{
    int a;
    char b;
    float c;
    int *al;
    union un
    {
        int a;
        char c;
        float f;
    }*ptr;
}test;

構造体メンバー 'al' と共用体メンバー a、c、f にアクセスするにはどうすればよいですか?

4

2 に答える 2

3

他と変わらない:

  1. アクセスal

    test.al
    

    の値が必要な場合はal、 で取得できます*(test.al)

  2. アクセスa, c,f

    test.ptr->a;
    test.ptr->c;
    test.ptr->f;
    
于 2014-03-03T08:08:03.647 に答える
0

問題は、ポインターを逆参照する必要があることです。

通常、ユニオンを逆参照するためにこれを行います。

test.*ptr.a.

これに関する問題は、コンパイラが逆参照シンボルの前にドット表記を実行することです。したがって、コンパイラは、ユニオン自体ではなく、ユニオン内のフィールドを逆参照します。

この問題を解決するには、'*ptr' を括弧で囲んで、フィールドにアクセスする前に共用体を強制的に参照するようにします。このような。

test.(*ptr).a

構文を簡単にするために、これは次のようにも記述できます。

test.ptr->a

于 2014-03-03T08:29:06.713 に答える