鉴于这些结构:
typedef struct {
//[...]
} StructA;
typedef struct {
StructA a;
//[...]
} StructB;
typedef union {
StructA a;
StructB b;
} Union;
两种访问方法是否等价且未定义?
Union u;
memcpy(&u.b, /*...*/); //Pretend I populated StructB here
u.a; // Method 1
u.b.a; // Method 2
注意structa恰好是structb的第一个成员。
我在一个有效的代码库中发现了这个,我只是想知道它是否是标准的,或者是否有任何对齐问题。
最佳答案
typedef union {
StructA a;
StructB b;
} Union;
a
与联合中的b
具有相同的偏移量:0a
在StructB
中有偏移量0。这些电话是对等的。