8、回调函数
1.定义
回调函数就是一个通过函数指针调用的函数。
理解:如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这个函数是回调函数。
特点:回调函数不是由该函数的实现方直接调用(其实也就是回调函数自身),而是在特定的事件或条件发生时由另外的一方调用的(另一个函数调用),用于对该事件或条件进行响应。
举例:比如上面计算器的方法二实现方式就是利用了回调函数的方法。
冒泡排序复习回顾: 整型数组排序。那我们将这样使 用函数:
冒泡排序的思想:两两相邻的元素进行比较,并且可能的话需要交换。
一趟解决一个数字的排序问题,
第一趟最大值9出现到最右侧,
第二趟8到右侧第二位 10个数字,需要进行9躺冒泡排序
n个数字 n - 1躺
一趟冒泡排序内部:
第一趟:10个数字待排序,9对比较
第二趟:9个数字待排序,8对比较
第三趟:8个数字待排序,7对比较 ……
第九趟:2个数字待排序,1对比较
上面我们写的冒泡排序只能排整数,如果遇到浮点型、结构体或者其他类型,那么上面的冒泡排序函数就不能使用了。
2.qsort函数
在C语言的库函数中有一个用于任意类型排序的函数 qsort
qsort-- - 使用快速排序的方法
qsort相关信息:
void* 类型讲解: void是无,空的含义,void * 表示的是无类型的指针。 void* 指针可以接收任意类型的地址(void 可以看作指针万能筒,可以接收任意类型) void 类型指针不能进行解引用操作的。
理解:我们知道指针的类型决定了指针解引用操作时访问字节的个数,如果指针类型是void *,无类型指针,那么就无法得知该指针解引用访问多少个字节数。
void* 类型指针不能进行++ / ±整数运算的操作。
理解:我们知道指针类型的意义除了决定指针解引用时访问字节的个数外,还决定了指针 + -整数运算的步长,如果指针类型是void *
无类型指针,那么就无法得知该指针 + -的步长到底是多少个字节。
① qsort排序整型数组
qsort函数中为了排序任意类型的数据,所以参数均给了void *
(1)下面我们来试着用qsort排序一下整型数组,熟悉qsort的使用:
② qsort排序浮点型数组
(2)下面再用qsort排序一下浮点型型数组,继续熟悉qsort的使用方式:
③ qsort排序结构体
(3)利用qsort排序结构体数据
④ qsort排序任意类型数组
(4)模拟实现qsort排序任意类型的排序函数-- - Bubble_sort