1,
结构体的对齐规则:
1.在32位的平台上,默认都是按4字节对齐的。 64位的平台 默认是8字节
2.对于成员变量,
各自在自己的自然边界上对齐。
整个结构体的对齐
3.如果 成员变量中有比4字节大。
此时 整个结构体按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体按照最大的那个成员对齐。
注意:
1.结构体类型,可以定义在 函数里面,但是此时作用域就被限定在改函数中
2.结构体的定义的形式:
形式1 先定义类型,后定义变量
struct stu
{
...
};
struct stu s;
形式2 定义类型的同时定义变量
struct stu
{
...
}s1,s2,*s3,s4[10];
struct stu s;
形式3 省略了类型名 --如果只用一次,可以这样写
struct
{
...
}s1,s2,*s3,s4[10];
2,
自然边界对齐
int -- 4字节 --- 能被4整除的地址编号上
short -- 2字节 --- 能被2整除的地址编号上
char -- 1字节 --- 能被1整除的地址编号上
结构体整体对齐
一般是以结构体
3,共用体
union 共用体名
{
成员列表; //各个变量
}; //表示定义一个共用体类型
注意:
1)共用体
初始化 --- 只能给一个值,默认是给到第一个成员变量的
2)共用体成员变量辅助
共用体用的数据最终存储的 --- 应该是最后一次给到的值。
但是只能影响到 自己数据类型对应的空间中的数据
3)可以判断大小端
4)实际用途
a.节省空间
b.进行数据转换
192.168.1.169 //ip本质是个 32位的数值
5)共用体的大小 --是成员变量中最大的那个成员的大小
6)共用体类型可以是函数参数,也可以是函数返回值类型
共用体,结构体类型定义出来之后,
a.定义变量
b.定义数组
c.定义指针
d.做函数参数,返回值类型
eg
struct teacher
{
char name[20];
int Tno;
float salary;
}
4,
枚举:一枚一枚列举 逐个列举
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
声明枚举类型用enum 开头。例如:
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
};
注意:
1.枚举 提高了代码可读性
2.枚举 本质上是int类型
枚举 与 整型 类型兼容
3.不足
因为枚举类型 --- 本质上是个整型类型,
所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中
4.枚举类型
可以做函数 形参 和 返回值
定义数组也可以,本质上就是整型数据
5,
链表
数据结构:数据的组织形式 (逻辑上理解的形式)
数组:
int a[10] = {1,2,3,4,5,6,7,8,9,10}; //连续性,有序性,单一性 数据组织形式 ---会决定使用数据的算法
数组: //顺序表
优点:随机访问 方便
缺点:
增加数据 不方便
删除数据 不方便
链表: 链式的数据表
优点:
增加 删除数据很方便
缺点:
找数据不大方便
计算机中:
计算机如何体现链式数据结构
[数据1]
[数据2]
存放链式数据的结构:
节点
[数据|另外一个节点指针]
[数据1|指针] //节点
[数据2|指针]
[数据3|指针]
[数据域|指针域]
eg
学生信息
节点:
struct Node
{
//数据域
struct stu s;
//指针域
struct Node *p; //指针类型
};
6,
空链表:
特点:
只有头节点
并且头节点的指针域 为NULL (相当于是尾节点)