头文件
预编译阶段 会对每一个文件进行预编译
将程序中的include导入的头文件进行展开
<> :导入系统的库
“” :导入自己写的库
为什么要自己写头文件
- 希望将功能从main.c文件中抽离出来 以便复用 移植
- 让main.c结构更清晰 阅读性更强
如何写头文件
- 创建一个头文件 命名(.h) 头文件里面仅存放有哪些方法
- 创建一个实现文件 命名(与头文件保持一致.c) 一一实现头文件里面的函数
a. 导入需要实现的头文件
b.实现头文件里面的函数
如何使用自己使用头文件
用#include“”导入自己写的头文件的名称
枚举 Enum
enum{
GradeOne,
GradeTwo,
GradeThree//最后一行的,可以不加
}//分号也可以不加
结构体
结构体是什么
将不同种类型的数据放在一个地方(数据封装)
类(一类事物的高度抽象 --> 封装数据)
数据封装:将多个多种类型不同的数据 封装为一个整体
name age height weight -> Person
//就是将name age height weight这几个数据放在person里面去
wheel door color brand -> Car同理
为什么要结构体
需要将不同类型的数据封装为一个完整的类型
如何定义结构体类型
struct{
char name[5];
int age;
};
注意:定义结构体时 结构体内部的类型不能赋值
类型重定义 重命名 给一个新的名称
typedef struct stu{
char name[20];
int age;
}Student;
结构体的大小
- 同种类型 本身就是对齐的(比如int占4个字节 有几个int就占用4*几个字节)
- 两种类型 小的向大的靠齐 char与int 一共8个字节
- 多种类型 字节小的向字节大的靠齐 如果之前靠齐的类型中
有剩余的空间,就直接使用 ,如果没有就靠齐
eg:
struct{
char *name;
int age;
char car[2];
};
//总共占用16个字节
/**其中最大的是char * 则用8个字节来算
char *分配8个
int 也分配8个但只用4个
char[2]本来只占两个字节 但int分配的字节还有剩余 则将char[2]所该分配的空间放在给int分配的空间里面了 只占2个 但int所分配的空间中还剩2个 是已经分配好了的 无法改变 所以一共16个字节