一、结构体声明与定义
1.声明: struct结构体名(一般首字母大写){成员};(必须带分号)
2.定义:struct 类项名 变量名 变量名后加.为结构体运算符 变量地址后加->为指向结构体成员
(s在栈区,struct Student在全局区)
也可以直接struct{}s1,s2 来声明变量s1,s2,此时结构体名可以省略,以后只能用s1,s2来实现
3.初始化:初始化之后,没有赋值的均为0
4.结构体对齐:系统会有意浪费空间,来对齐提高系统效率
5.对齐原则:1、结构体按照其最长成员大小对齐,即最终的大小必须为最长成员大小的整数倍
2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节的放置位置必须能够整除成员的字节数
3.、若结构体某个成员的字节数大于CPU字节数,则按照CPU的字节数对齐
4、可以使用#pragma pack(n)强制编译器按照指定n值对齐,可以为1,2,4,8,16
二、结构体传参
1、通常使用指针传参
2.结构体变量允许赋值,本身不是数组(不能整体比较,但成员间可以互相比较)
3.程序 = 数据结构+算法(尽量不在头文件里包头文件,会降低编译效率
三、用指针处理链表
pHead头指针保存第一个节点的位置(插入,删除的算法复杂度为1,效率相较数组较高,但其成员地址并不连续,,不能直接加i访问第i个元素的地址节点内存均在堆区)
空链表:头指针指向NULL