八月的雨季 最後的冰吻

八月的雨季 最後的冰吻

定义

回调函数,当一个函数执行时,中途调用其他定义好的函数来帮助实现功能,再继续执行这个函数
C--函数指针与回调函数-LMLPHP

函数指针

类型为函数的指针,如下

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


04-12 04:16