结构体 struct
描述一些 基本数据类型不好描述的 ;复杂的数据类型
就是要描述一类事物,需要从他的方方面面入手,而这些方面的数据类型又各不相同,这时需要整合在一起;就是结构体;而这个结构体相当于一个模具,可以批量得到这一类的各项数据;
如:
struct 学生
{
char name[20] ; // 姓名 切记char类型后变量名后要加所需要的多少个字符空间大小;
int classNO; // 班级
int age ; // 年龄
int score ; // 成绩
...
};结尾切记要加 ' ; ' (分号)
总结:
struct 结构体类型名;
{
数据成员列表;
};
定义完结构体后,在一般主函数调用;
调用时:
struct 结构体类型名 s = { 数据成员列表一 一 输入;}中间用逗号隔开,类型要与上述定义类型一致;定义几个输入几个;
1. . (点)
结构体变量名 . 成员变量名
如:s . name; 变量s 中指向那个name的刚刚输入的量;
2. ->
结构体变量地址 -> 成员变量名
用地址 直接访问到 成员变量;刚刚输入的那个量;
3.struct ... *
struct 结构体类型名 *s = { 数据成员列表一 一 输入;}
定义一个指针类型的变量s 这个指针指向结构体的存储地址
4.struct ... 数组;
struct student a[3]={{数据成员列表1},{数据成员列表2},{数据成员列表3}}
一次定义三个数据结构体,拿出这类的三个不同个体进行比较;
此处 a <=>数组首元素地址;
因此可直接用 -> 进行循环(a+i)-> 成员变量名;直接用地址得到 数据
5,结构体对齐规则
判断结构体大小
1.32位平台上默认四字节对其; //因为宽度为4,一次传4个字节;因此,在存放时一般放在4的倍数上的地址;
2.对于成员变量:各自在各自的边界上对其;
3.成员变量中有比四字节大的:按照四字节对齐;
4.成员变量中没有比四字节大的:按照最大的那个成员对齐;
1.64位平台上默认8字节对其;//8,一次传8个字节;因此,在存放时一般放在8的倍数上的地址;
2.成员变量中没有比四字节大的:按照最大的那个成员对齐
3.成员变量中有比四字节大的:8字节必须放在地址是8的倍数的位置,因此按8字节算;
4.一些小于或等于四字节的在一起但有大于四字节的在后面,那一堆小字节的的按4字节对齐;临近8字节看第三点;