为什么单独拎出结构体这一章

学到这一章,说明基本语法、流程控制和数组已经过了一遍。但真去写稍大点的项目,你会发现现实数据没法只用一个整数或字符表示。一个学生要有学号、姓名、多科成绩,一个网络包要有源地址、目的端口、负载,靠一堆零散变量硬凑,代码很快乱成一团。这一章解决的就是把相关数据打包成一个整体的问题。别觉得听着简单就跳过,结构体是后续链表、文件读写、操作系统接口调用绕不开的底座,这块没吃透,后面学指针和系统编程只会越看越糊涂。

能力缺口与练习建议

很多人卡住的地方很具体:一是搞不清类型定义和变量声明的区别,写出来编译报重定义;二是算不对字节数,以为成员多大结构体就多大,一碰内存对齐就发懵;三是一到指针访问成员就分不清点号和箭头的边界。建议先集中看类型定义、变量声明、字节数测试这三块,把类型和实例的关系彻底理顺。接着重点啃普通访问与指针访问这两组,别急着往后赶,自己敲一遍对比两种写法的反汇编差异。学完嵌套和数组后,拿一个通讯录或学生档案的小项目练手:定义含嵌套成员的结构体,用数组管理多条记录,再分别用直接传值和传指针的方式写遍历函数。资料里的示例代码别只看,照着改成员类型和顺序,观察字节数变化,这种手感比背概念管用得多。

看完应能独立回答的问题

把配套练习跑通后,拿这几个问题自测:定义一个结构体类型时,内存到底分配了没有?包含一个 char 和一个 int 的结构体,sizeof 结果为什么往往不是五而是八,对齐规则是怎么起作用的?同一个结构体变量,用点号访问成员和用箭头访问成员的前提条件分别是什么?把整个结构体变量作实参传给函数,和传结构体指针进去,在性能和副作用上有什么实质差别?结构体数组怎么排序、怎么按某成员查找?这些问题答得利索,说明这块的底子打牢了,后续学链表和文件操作时,至少不会在语法层面卡壳。别假装全懂,哪题卡了就回去重看对应那几节。

课程目录

1 为什么需要结构体 (15:44)
2 定义一个结构体类型 (28:37)
3 结构体变量的声明和定义 (33:53)
4 sizeof测试结构体变量字节数 (07:59)
5 结构体成员的普通访问方式1 (19:31)
6 结构体成员的普通访问方式2 (18:44)
7 使用指针访问结构体成员1 (29:18)
8 使用指针访问结构体成员2 (29:25)
9 结构体嵌套1 (24:57)
10 结构体嵌套2 (11:43)
11 传递整个结构体变量 (19:48)
12 传递结构体的成员 (11:12)
13 传递整个结构体变量的指针 (25:02)
14 传递结构体成员的指针 (24:28)
15 结构体数组1 (19:33)
16 结构体数组2 (20:23)