函数指针:
函数返回值(*函数指针名p)(参数列表);
函数指针就是指向函数的指针,里面存储的就是该函数在代码段的位置。
函数指针中储存了函数的首地址,对它解引用就可以执行函数
定义函数指针:
返回值类型(*指针变量名)(类型1,类型2,...);
举例:
int(*compar)(const void *, const void *);
定义函数指针强化版本:
typedef 返回值(*指针名)(类型1 参数名1;类型2 参数名2 ...);
(此时指针名就是这种类型)
指针名 变量名;
(此时这里的变量名就是一个函数指针)
赋值:
指针变量名 = 函数名;
解引用:
指针变量名(实参);
回调:
可以通过函数指针,把函数作为参数传递给另一个函数,这叫回调。
使用了回调模式的库函数:
快速排序
void qsort(void *base, size_t nmemb, size_t size,int(*compar)(const void *, const void *));
二分查找
void *bsearch(const void *key, const void *base,size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
使用 qsort()快排升序,bsearch()二分查找。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *p1,const void *p2)
{
return *(const int *)p1 > *(const int *)p2;
}
int main(int argc,const char* argv[])
{
int arr[10] = {};
for(int i=0;i<10;i++)
{
arr[i] = rand()%100;
}
qsort(arr,10,4,cmp);
for(int i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
int key = 93;
int *p = bsearch(&key,arr,10,4,cmp);
if(NULL != p)
{
printf("\n找到了,-%d-\n",*p);
}
else
{
printf("\n没找到\n");
}
}