结构体
概念说明
结构体用于把多个不同类型的字段组织成一个整体。 当一条数据不再只是单独的整数或字符串,而是“编号、姓名、成绩”这种多属性组合时,结构体就很适合。
结构体是 C 语言进行数据建模的重要方式。 后面的链表、树、网络包、配置项等复杂数据结构,很多都会以结构体为基础。
结构体既可以单独使用,也可以和数组、指针、函数参数组合。
所以学结构体时,不只是会写 struct,还要会处理结构体数组和结构体指针。
语法/规则
- 结构体定义形式是
struct 结构体名 { 字段列表 };。 - 访问普通结构体变量成员使用
.,访问结构体指针成员使用->。 - 结构体可以在定义时初始化,也可以后续逐个字段赋值。
- 结构体数组适合表示一组同构但多字段的数据。
- 结构体作为函数参数时可以按值传递,也可以传指针;数据较大时传指针更常见。
- 结构体内存布局可能包含对齐和填充,不能随意假设字段紧密排列。
- 如果结构体名称写起来太长,可以配合
typedef提升可读性。
示例
| |
输出结果:
| |
常见错误
- 结构体变量和结构体指针混用,把
.和->写反。 - 误以为结构体字段一定紧挨着排列,忽略了内存对齐和填充。
- 只图方便把无关字段全部塞进一个结构体,结果模型越来越混乱。
- 复制结构体时没有意识到这是按字段整体复制,而不是共享同一份对象。
- 结构体数组下标和成员访问一起使用时,没有先把表达式读清楚,导致访问错位。