Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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_Struct_Unions - Fatal编程技术网

C结构内部并集结构内部并集

C结构内部并集结构内部并集,c,struct,unions,C,Struct,Unions,如何初始化结构为B或C的变量 typedef struct _A { union { struct { int b; } B; struct { int c; } C; } u; } A; 差不多 A.u.B*bVar不起作用类型定义仅涵盖A,而不包括其中定义的联合或结构 typedef不能那样嵌套-每个用户定义的“type”必须有一个标签,因此声明类型为a.u.B的变量是非法的。这应该做到: /* Initi

如何初始化结构为B或C的变量

typedef struct _A
{
  union
  {
    struct
    {
      int b;
    } B;
    struct
    {
      int c;
    } C;
  } u;
} A;
差不多
A.u.B*bVar不起作用

类型定义
仅涵盖
A
,而不包括其中定义的联合或结构

typedef
不能那样嵌套-每个用户定义的“type”必须有一个标签,因此声明类型为
a.u.B
的变量是非法的。

这应该做到:

/* Initialise to zero */
A a = {{{0},{0}}};
/* Now set the b to 5 */
a.u.B.b = 5;
如果仔细观察花括号,就会发现它们与类型声明中的括号完全匹配。因此,第一个括号开始于
A
,第二个括号开始于
A.u
,第三个括号开始于
A.u.B
,第一个
0
对应于
A.u.B
。关闭大括号完成
A.u.B
,然后逗号表示下一个打开大括号开始
A.u.C
,因此第二个零初始化
A.u.C.C
,然后所有大括号再次关闭


注意:并非所有编译器都支持匿名结构。我记不清标准是否允许使用它们……

您应该将您的结构声明在一旁

typedef struct {
    int b;
} B;

所以我不能初始化为
A.u.B=5
?@不,因为(根据我的回答)没有
A.u.B
这样的类型。你必须声明一个
a
类型的变量,然后设置它的内容。@Alnitak是正确的,它不是真正的“a.u.B”。我刚才用这个符号解释了大括号如何初始化。你的意思是分别声明B和C,并将它们包含在联合体中的a
typedef结构{union{struct B;struct C;}u;}a是的。然后您可以使用此类型。@但是请注意,如果您声明一个独立的
B
,它将不会自动成为封闭的
a
@Alnitak的一部分。是的,我理解that@Nitrate如果您已经
typedef B
C
了,那么您的
A
就是
typedef结构{union{bb;cc;}u;}A-不再需要使用
struct
来引用
B
C