C++ 访问联合结构中的变量

C++ accessing a variable in a union struct

我正在使用一个结构定义如下的库:

typedef struct {
    int x;
    union {
        struct {
            y;
            union {
                int z;
            } innerStruct;
            char *a;
        } middleStruct;
    int q;
    } u;
} mainStruct;

如何访问 char* a?

我试过多种方法。这有效:

mainStruct *myStruct;
int d = myStruct->x;

但这不起作用:

char *d = myStruct->a;

我用上面的方法可以得到x但不是a。为什么?

我以前从未使用过联合,我被迫将此结构用作我需要的库的一部分。提前感谢您的帮助,抱歉,如果我正在讨论这个问题。

字段 xmainStruct 的直接成员,因此这很自然:

int d = myStruct->x;

字段 amiddleStruct 的成员,后者是 u 的变体,umainStruct 的成员。它比 x 嵌套更深,因此您需要像这样导航数据结构:

char *d = myStruct->u.middleStruct.a;

I can get x fine using the above method but not a. why?

因为 xmainStruct 的成员,但 a 不是。

amiddleStruct 的成员,middleStructu 的成员,umainStruct 的成员。您可以使用与访问非联合 class 实例的成员相同的语法来访问联合实例的成员。所以,你可以写 myStruct->u.middleStruct.a

P.S。 mainStruct->u 的行为未定义,除非您首先初始化 mainStruct.