langShiftlangShift

结构体与联合体

从 JavaScript 视角学习 C 语言结构体与联合体,理解 struct、union、内存布局,并对比 JS 对象。

结构体与联合体

1. 概念介绍

从 JavaScript 对象到 C 结构体

在 JavaScript 中,对象是动态的键值对集合,属性可以随时添加或删除。而在 C 语言中,结构体(struct)用于将相关变量组合在一起,内存布局固定。联合体(union)允许不同类型的数据共享同一块内存。

💡 核心概念:C 的结构体和联合体是建模复杂数据、优化内存和系统级编程的基础。

2. 语法对比

正在加载...

3. 联合体

正在加载...

4. 常见陷阱

  • C 结构体布局固定,不能动态添加属性
  • 联合体成员共用内存,只能有效使用一个成员
  • 字符串操作需注意缓冲区大小(如用 strcpy
  • 内存对齐和填充会影响结构体大小

5. 练习题

  1. 定义一个 Book 结构体,包含书名、作者和价格,编写输入和输出代码。
  2. 创建一个联合体,可存储 intfloatchar[10],并演示用法。
  3. 比较包含相同成员的结构体和联合体的内存占用。

6. 性能分析

  • 结构体提供高效、缓存友好的数据布局
  • 联合体在只需存储一种类型时节省内存
  • 不当使用联合体可能导致未定义行为

小结:C 的结构体和联合体是数据建模和内存优化的利器。与 JS 对象不同,它们布局固定且需手动管理内存。掌握这些概念对系统编程和高性能开发至关重要。