答案 (1) 8 ;(2) 12 ;(3) 8 解析 - 对于 struct A :在32位系统中, int 占4字节, char 占1字节 , short 占2字节。结构体成员按声明顺序存储,为满足内存对齐原则(成员的地址是其自身大小的整数倍), char 类型的 b 后需填充3字节,使得 short 类型的 c 能从2的整数倍地址开始存储。所以 sizeof(A)=4 + 1 + 3+ 2 = 8 字节。 - 对于 struct B : char 占1字节, int 占4字节, short 占2字节。由于 char 类型的 b 后要填充3字节使 int 类型的 a 从4的整数倍地址开始存储, short 类型的 c 后要填充2字节使结构体总大小为最大成员(这里是 int ,4字节)大小的整数倍。所以 sizeof(B)=1 + 3+ 4 + 2 + 2 = 12 字节。 - 对于 struct C : #pragma pack(2) 指令指定了2字节对齐。 char 占1字节, int 占4字节, short 占2字节。 char 类型的 b 后填充1字节使 int 类型的 a 从2的整数倍地址开始存储, short 类型的 c 无需额外填充,此时结构体总大小为8字节,满足2字节对齐要求。所以 sizeof(C)=1 + 1+ 4 + 2 = 8 字节。