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