Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;访问联合结构中的变量_C++_Struct_Member_Unions - Fatal编程技术网

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

C++ C++;访问联合结构中的变量,c++,struct,member,unions,C++,Struct,Member,Unions,我正在使用一个定义了如下结构的库: typedef struct { int x; union { struct { y; union { int z; } innerStruct; char *a; } middleStruct; int q; } u; } mainStruct; 如何访问char*a

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

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;
int d = myStruct->x;
但这不起作用:

char *d = myStruct->a;
我可以用上面的方法得到x,但不能得到a。为什么?


我以前从未与工会合作过,我被迫将此结构用作我需要的库的一部分。提前感谢您的帮助,如果我打断了这个问题,请原谅。

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

mainStruct *myStruct;
int d = myStruct->x;
int d = myStruct->x;
字段
a
middleStruct
的成员,它是
u
的变体,后者是
mainstuct
的成员。它比
x
嵌套得更深,因此您需要像这样导航数据结构:

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

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

mainStruct *myStruct;
int d = myStruct->x;
int d = myStruct->x;
字段
a
middleStruct
的成员,它是
u
的变体,后者是
mainstuct
的成员。它比
x
嵌套得更深,因此您需要像这样导航数据结构:

char *d = myStruct->u.middleStruct.a;
我可以用上面的方法得到x,但不能得到a。为什么?

因为
x
mainStruct
的成员,但是
a
不是

a
middleStruct
的成员,middleStruct是
u
的成员,后者是
mainstuct
的成员。可以使用与访问非联合类实例成员相同的语法访问联合实例的成员。因此,您可以编写
myStruct->u.middleStruct.a

注意,
mainStruct->u
的行为未定义,除非您首先初始化
mainStruct

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

因为
x
mainStruct
的成员,但是
a
不是

a
middleStruct
的成员,middleStruct是
u
的成员,后者是
mainstuct
的成员。可以使用与访问非联合类实例成员相同的语法访问联合实例的成员。因此,您可以编写
myStruct->u.middleStruct.a


另外,
mainStruct->u
的行为是未定义的,除非您首先初始化
mainStruct

myStruct->u.middlestruct.a
myStruct->u.middlestruct.a