struct 和 union 的区别?

struct和union的分对应点总结

  1. 存储方式
    • struct:struct中的每个成员都拥有独立的内存空间。一个struct变量的总长度是其所有成员的长度之和,且通常会根据编译器的内存对齐规则进行适当调整。
    • union:union中的所有成员共享同一段内存空间。一个union变量的长度等于其最长成员的长度。在任何时候,union中只有一个成员的值是有效的。
  2. 内存分配与使用
    • struct:适合将不同类型的数据组合成一个单独的结构体,每个成员都有独立的存储空间,互不干扰。
    • union:适用于节省内存空间,尤其是在需要存储多个可能类型但一次只使用一种类型的数据时。
  3. 成员赋值与访问
    • struct:对struct中的不同成员赋值不会影响到其他成员的值,因为它们的内存空间是分开的。
    • union:对union中的某个成员赋值会覆盖其他成员的值,因为它们共享同一段内存。
  4. 用途与场景
    • struct:常用于定义复杂的数据结构,如链表节点、学生信息记录等,便于组织和管理数据。
    • union:常用于需要存储多种类型数据但每次只使用一种类型的场景,如网络协议解析、硬件寄存器访问等。
  5. 初始化与访问
    • struct:可以分别初始化每个成员,并通过成员名来访问它们。
    • union:通常只初始化一个成员,并通过相同的成员名来访问当前有效的成员。
  6. 内存布局
    • struct:内存布局通常按照成员在定义中出现的顺序排列,且可能会有内存对齐的填充字节。
    • union:所有成员都位于同一段内存区域的起始位置,不会有额外的填充字节。
  7. 安全性与错误检查
    • struct:由于每个成员都有独立的存储空间,因此在使用时相对安全,不易出现数据覆盖的问题。
    • union:使用union时需要格外小心,确保在访问某个成员之前已经正确地赋值了该成员,以避免数据混乱或未定义行为。

通过以上的分对应点总结,可以清晰地看到struct和union在存储方式、内存分配与使用、成员赋值与访问、用途与场景等方面的主要区别。在实际编程中,应根据具体的需求和场景选择合适的数据结构。

你可能感兴趣的:(日常学习知识点,c++)