C struct内部结构内部结构

时间:2012-04-26 15:01:08

标签: c struct unions

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

typedef struct _A
{
  union
  {
    struct
    {
      int b;
    } B;
    struct
    {
      int c;
    } C;
  } u;
} A;

喜欢的东西 A.u.B *bVar;不起作用

3 个答案:

答案 0 :(得分:5)

typedef仅涵盖A,而不是其中定义的联合或结构。

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

答案 1 :(得分:4)

这应该这样做:

/* 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.b。闭括号结束A.u.B,然后逗号表示下一个开始括号开始A.u.C,因此第二个零初始化A.u.C.c,然后所有大括号再次关闭。

注意所有编译器可能不支持匿名结构。我不记得他们是否被标准所允许......

答案 2 :(得分:1)

你应该宣布你的结构。

typedef struct {
    int b;
} B;