函数指针数组
函数指针我们在指针进阶1中说过,指向函数的指针,定义为
返回类型 (*指针名)(指向的函数的参数);
比如这个add函数
而函数指针数组就是存放函数指针类型的数组;
定义
首先这是个数组,指针应该先与 [ ] 结合,其他的与函数指针类型一样
比如
p就是一个函数指针数组
这个函数指针数组p存放了add,sub,mul三个函数的地址,我们就可以通过数组来找i到函数,
函数指针数组指针
指向函数指针数组的指针是一个指针指针指向一个数组 ,数组的元素都是函数指针(还可以无限套娃),这个一个指针,那么指针变量就应该先与*结合,比如
pp就是一个函数指针数组指针;
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个 函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数 的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进 行响应。
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
void comp(int(*p)(int, int), int a, int b)
{
printf("%d\n", p( 3, 5));
}
int main()
{
int (*p1)(int, int) = add;
int (*p2)(int, int) = sub;
int (*p3)(int, int) = mul;
int (*p[3])(int, int) = { add,sub,mul };
for (int i = 0; i < 3; i++)
{
comp(p[i], 3, 5);
}
return 0;
}
举一个最简单的例子
这是一个简单的计算,有三个计算的函数,comp就是一个回调函数,它接受一个函数指针类型
和俩个参数,用来计算两个值,但要进行什么操作,需要传对其操作的函数地址,比如上面
通过传入不同的函数指针;来对a,b进行操作,
在c语言中,快速排序函数qsort,也是回调函数,下次我们将详细讲解这个函数
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));