定义
回调函数,当一个函数执行时,中途调用其他定义好的函数来帮助实现功能,再继续执行这个函数
函数指针
类型为函数的指针,如下
void func()
{
}
int main()
{
void (*pf)() = func;
pf(); // 调用func
//type 定义
typedef void (*PF)(void);
PF pf2;
pf2 = print;
pf2(); // 调用func
}
qsort中的回调函数
#include <stdio.h>
#include <stdlib.h>
// 将 > 换位 < , 排序从大到小
int myComPare(const void * pa, const void * pb){
return *(int *)pa > *(int *)pb ? 1:-1;
}
int main()
{
int arr[10] = {2,1,3,4,6,5,7,8,9,10};
qsort(arr,10,4,myComPare);
for(int i=0;i<10;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
运行结果:
1
2
3
4
5
6
7
8
9
10
自实现排序的回调函数
#include <stdio.h>
#include <stdlib.h>
int ComPare(int a, int b)
{
return a>b?1:0;
}
void selectSort(int *p,int n,int (*pf)(int a,int b))
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(pf(p[i],p[j]))
{
p[i] ^= p[j];
p[j] ^= p[i];
p[i] ^= p[j];
}
}
}
}
int main()
{
int arr[10] = {2,1,3,4,6,5,7,8,9,10};
selectSort(arr,10,ComPare);
for(int i=0;i<10;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
运行结果:
1
2
3
4
5
6
7
8
9
10