联合占用的存储与预期不匹配
该联合包含 uint32、uint16 和 int8。使用 sizeof() 函数我发现它们占用了 4、2 和 1 个字节。所以联合应该包含 7 个字节。但它显示它只占用了 4 个字节。我不知道为什么...
int main(){
union{
uint16_t a;
uint32_t b;
int8_t c;
}u1;
cout<<sizeof(u1)<<endl;
}
回答
来自C17 文档6.7.2.1,第 82 页,(16)
联合的大小足以包含其最大的成员。
uint32_t b是最大的成员,大小为 4 个字节。因此,联合的大小为 4 个字节。