这节主要复习函数指针
函数指针
函数指针的标志就是int (* ) (数据类型), 是储存函数的地址的指针变量。函数名就是的首地址。我们平常使用的函数名就是函数的地址:
由此可以发现,我们可以通过函数的地址来使用函数。
那么我们就可以知道函数指针的一个作用:
大体使用思路就是通过将一个函数(这里叫函数一)的地址传送给一个另一个函数(这里叫函数二),函数二需要调用所接收函数时直接通过地址调用函数。
这样的好处是更加灵活。区别于函数的复用。当想用什么函数时,直接将函数一进行替换成想要使用的函数。而函数的复用的话,只要建立好函数二,就是不可变的。
这种方法有一个名字:回调函数
回调函数
回调函数是一个重要的知识点,主要是通过将一个函数(元素类型,返回类型与调用函数的参数类型相同)传送给调用函数。诸如qsort排序函数就是使用了回调函数的思想
qsort的定义是: void qsort (void* base, size_t num, size_t width, int cmp(const void , const void ));
qsort可以对任意类型数据进行排序。void* base 是要进行排序的数据的首地址。size_t num是要进行排序的数据的个数。size_t width是要进行排序的单个数据的字节数。而int cmp(const void , const void)则是该数据的判断大小的函数。假如第一参数大于第二参数,则返回正数, 第二参数大于第一参数,则返回负数。相同则为零。
这里进行结构体数据的排序:
函数指针数组
函数指针数组,首先是一个函数指针,其次再是一个数组。
int (* [ ]) ( ), 首先(* [ ])代表是一个数组指针。然后int(* [ ])()代表着数组的类型是返回值是整数的函数。
函数指针数组应用较少。不过在谭浩强c语言的指针章节课后题中,那个寻找最大值还有四个最小值的题中可以使用函数指针数组,强化训练。