Skip to content

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. 小结

共用体适合节省空间与多视图表示,但要避免不定义行为,确保类型标签与访问一致。

本站内容仅供学习和研究使用。