鉴于这些结构:

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具有相同的偏移量:0
aStructB中有偏移量0。
这些电话是对等的。

08-16 19:53