C 共用体(union)
共用体所有成员共享同一段内存,适合节省空间或表示同一数据的不同视图。
1. 定义与用法
c
union Number { int i; float f; unsigned u; };
union Number n; n.i = 0x3f800000; // 与 IEEE 754 视图相关(实现相关)
printf("%u\n", n.u);2. 大小与对齐
sizeof(union)等于最大成员的大小,并按最大对齐要求对齐
3. 有效成员与类型惰性
- 推荐只读写最后一次写入的成员
- 跨类型读写依赖实现,非可移植
4. 典型用途
- 节省内存(如嵌入式场景)
- 解析协议数据的不同视图(需谨慎对齐与字节序)
5. 与结构体混用
c
typedef struct {
int tag; // 区分当前有效类型
union { int i; float f; } val;
} Variant;6. 小结
共用体适合节省空间与多视图表示,但要避免不定义行为,确保类型标签与访问一致。