结构体
定义与使用
是一种自定义的数据类型
提供给用户(程序员)
自定义一种数据类型 --程序员根据问题的需要,自己来组织一种数据类型
可以描述现实生活中一些 用基本数据类型不好描述的 场景
结构体,可以把不同类型的数据集合在一起
语法:
struct 结构体名
{
//成员变量 --- 各个成员变量之间用; 隔开
}; //有 分号
使用结构体的思路:可以参考基础数据类型的使用
int --定义--->变量/指针/数组/函数形参/函数返回值类型
自己先构造出结构体类型 --->有了类型--->变量/指针/数组/函数形参/函数返回值类型
定义形式
//形式1
struct demo
{
....
}; //1.定义结构体类型
struct demo d; //2.定义变量
//形式2
struct demo
{
....
}d={初始化}; //1.定义结构体类型 //2.定义变量
//形式3 ----如果你的结构体类型只用一次
struct
{
....
}d={初始化}; //1.定义结构体类型 //2.定义变量
结构体变量的使用
. //结构体成员运算符
用法:
结构体变量名.结构体成员变量名
//表示访问到结构体的成员
注意:
1.结构体初始化
按照成员变量顺序依次初始化
成员变量 本身的方式初始化
2.赋值
相同类型的结构体变量 之间可以相互赋值
给结构体成员变量赋值 ,按照成员变量本身的方式赋值
输入也是 员变量本身的方式输入

结构体可以做函数的形参
//结构体类型的变量 (不推荐)
//结构体类型的指针 (推荐)
-> 指向结构体成员运算符
用法:
结构体指针->结构体成员变量名
内存对齐
1. 对于基本类型的数据
尽可能把数据放自然边界对齐
结构体对齐
1. 成员变量,都放在自然边界对齐
2. 整个结构体,按照成员变量中最大来对齐

结构体的大小为12个字节
共用体
就是为了节省空间
成员变量共用一个起始位置,同一块公共空间
union demo
{
char a;
short b;
int c;
};
注意:
1. 共用体 本身 使用的空间 至少得能放得下最大成员
2. 共用体变量初始化,值默认给到第一个成员变量
3. 用共用体 检测电脑大小端
4. 共用体中 各个成员变量 起始地址相同
5. 共用体空间的数据,最终结果
取决 一开始有什么
以及 最后一次给的是什么
大小
共用体的大小 得是 能够整除成员变量中最大的数据类型大小

其中union的大小为8个字节
判断大小端

利用共用体中成员变量共用同一块空间的特点,
对int型赋值1,它的值会使用整个空间,即只有小端有值为1,其余全是零
再用char型变量取一个字节的空间,该变量如果为1则PC是小端存储,如果为0,则PC是大端存储
数据的转换
可以把存入的字符转换为其他类型的数据

枚举
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓"枚举"是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
但是在C语言实现中,是按照int型处理的,从本质上看,就是一个int型数据。
语法:
enum 枚举类型名
{
枚举常量名1,
枚举常量名2,
枚举常量名3,
};
提高代码可读性,提高代码的语法检查
与#define的对比:
#define //预处理 --
//文本原样替换 --- 不存在类型
//枚举有类型 -- 有更严格语法检测
快速排序函数
qsort
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
功能:
排序一个数组
参数:
@base 数组起始位置
@nmemb 数组中元素的个数
@size 单个元素的大小
@compar 表示排序的依据
反应数组中两个元素之间大小关系
//比较规则的回调函数
int compar(const void *a, const void *b)
{
....
说明这两个元素之间的大小关系
>
<
==
return >0 ==0 <0
}
a 和 b 表示 是某两个数组元素的地址

211

被折叠的 条评论
为什么被折叠?



