结构体
结构体类型 --- 用来描述复杂数据的一种数据类型
构造类型 --- 用户自定义类型
声明一个结构体类型的一般形式
struct 结构体名
{
成员列表;
};
(1)struct 关键字
表示是在构造一个结构体类型
(2)结构体名
用来描述结构体这个类型的一个名称
(3)成员列表
表示要描述的的复杂数据中用到的具体的成员变量,定义的方式与之前变量的方式相同,多个成员变量之间用分号隔开
(4)最后有一个;表示结束
eg:
struct student
{
char name[30];
int sno;
float score;
char sex;
}; //表示定义出一个数据类型
注意
1.结构体类型的使用过程
a.先定义出类型
b.定义变量
2.定义变量
struct 结构体名 变量名
结构体初始化
struct student stu = {};
初始化看每个成员变量具体是什么类型,根据各个成员变量自身的数据类型,进行初始化。
初始化的顺序,按照定义的顺序,依次初始化
结构体变量的引用:
引用到成员需要运用结构体成员运算符 --- '.'
使用:结构体变量名.成员名
-> //指向结构体成员的运算符
结构体指针->成员名
结构体类型的定义形式
形式1
struct demo
{
};
struct demo d;
形式2:定义类型的同时,定义变量
struct demo
{
}d;
形式3:定义类型的同时,定义变量,可以省略结构体名
struct
{
}d; //如果结构体只用一次可以这么用
结构体类型的大小
判断依据:内存对齐
结构体对齐规则
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
----------------------------------------------
//64位的平台
//如果超过4字节的,按超过的最大的成员变量对齐
//如果没有超过4字节的,则按成员变量中最大对齐
qsort(快速排序)
void qsort(
void *base, //要排的数组的首地址
size_t nmemb, //数组元素的个数
size_t xiae, //单个元素的大小
int (*compar)(const void *a,const void *b) //比较函数——提供比较的依据,需要自己写
)
功能:排序数组
总结:
1.理解结构体概念及用途
2.使用方法
a.自己构造出这个结构体类型
b.类型使用:定义变量;定义数组;定义指针;做函数形参(结构体类型指针);做函数返回值
3.考点:结构体类型的大小计算
共用体:union
语法:
union 共用体名
{
成员变量;
};
eg:
union demo
{
char a;
short b;
int c;
};
共用体:共用了一块内存空间,公用了最大成员的空间
注意:
1.共用体初始化时,只能给一个值,默认时给到第一个成员符。
2.共用体变量中的值,取决于最后一次给到的值,还有看能影响几个字节
对比结构体
1.结构体中各个成员拥有自己独立空间
2.共用体中成员共用一块空间