1、C语言基本类型:字符型、整型、浮点型
2、结构体(复杂类型):自定义类型
3、定义变量:为了分配空间
类型 变量名; //注:非陪空间编译器通过类型来分配
初始化:分配空间的同时赋值
3.1定义结构体(自定义)类型
struct 类型名
{
...
属性1;
属性2;
属性3;
...
};
3.1.1无嵌套结构体:所有属性都是基本类型
struct people
{
//性别
char sex;
//姓名
char name[10];
//身高
unsigned short height;
};
3.1.2嵌套结构体:属性是一个结构体变量
struct people
{
};
3.2定义结构体变量:类型 变量名;
struct 类型名 变量名;
3.3引用结构元素:一定要通过结构体变量来引用属性
变量名.属性
3.4结构体的分配空间法则:以最大字元素字节对齐
如char name[10] char sex short height
空间则为:100+2+2=14 因为把char sex的1字节变为2字节
若将char name[10]变为char name[13]
空间为:16 为什么?因为共享空间
1、查找最大元素的类型
2、每个元素都分配以最大类型的倍数
3、共享空间?
这和定义类型时的顺序有关
如有如下定义:
int id;
char name[100];
short height;
char sex;
此时的空间为:4+100+4
为什么最后只有一个4呢?
因为short只需要2个字节,但是分配了4个字节,其中多出来的两个字节是无用的,而接下来的char
只需要1个字节,因此short和char共享4个字节,前两个为short,后两个为char
再有如下定义:
char sex;
int id;
char name[100];
short height;
此时的空间为:4+4+100+4
此时没有共享空间,所以每个属性都是占用4个字节
注:GCC编译器可以指定对其方式(这部是C语言的标准)
__attribute__((packed)) 通过此代码可以改变字节对齐方式
3.5结构体变量之间赋值 注:不同类型的结构体之间不能赋值,同类型之间可以
struct a,b;
a=b;
4、结构体数组
练习:
1、打印所有学生信息
2、查找分类>90以上的学生信息
3、打印最高分学生信息(监哨值法)
4、查找学生分数高于平均的学生信息
5、用递归来实现二分
6、用二分查找来实现对结构体数组元素的查找(分数)。
题目较简单,不附自己写的代码了,5、6两题见二分法