函数指针 回调快速排序 快排 二分查找

函数指针

函数返回值(*函数指针名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");
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值