如何初始化结构 B 或 C 的变量?
typedef struct _A
{
union
{
struct
{
int b;
} B;
struct
{
int c;
} C;
} u;
} A;
类似的东西
A.u.B *bVar;
不起作用
唯一的typedef
封面A
,而不是其中定义的联合或结构。
typedef
不能这样嵌套——每个用户定义的“类型”必须有一个标签,所以声明一个类型的变量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.b
。右大括号结束A.u.B
,然后逗号表示下一个左大括号开始A.u.C
,因此第二个零初始化A.u.C.c
,然后所有大括号再次关闭。
请注意,并非所有编译器都支持匿名结构。我不记得他们是否被标准允许......
你应该声明你的结构。
typedef struct {
int b;
} B;