文章目录
- 定义
- 函数指针
- qsort中的回调函数
- 自实现排序的回调函数
定义
回调函数,当一个函数执行时,中途调用其他定义好的函数来帮助实现功能,再继续执行这个函数
函数指针
类型为函数的指针,如下
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