【c++】函数指针和qsort库函数

本文介绍了C++中的函数指针概念,包括定义方式,并以C语言的快速排序库函数qsort为例,解释了如何使用函数指针进行排序。qsort函数需要传入数组起始地址、元素个数、元素大小以及一个比较函数,比较函数用于确定排序规则,返回值决定了元素的前后顺序。

在C语言或者C++语言中可以把一个函数的入口地址赋值给一个指针,这就叫函数指针,然后可通过函数指针来调用函数。

C语言中:
定义形式:类型名(*指针变量名)(参数类型1,参数类型2…)
eg: int(*pf)(int,char)
表示pf是一个函数指针,它所指向的函数,返回值是int,有两个参数,分别为int和char

#include<stdio.h>
void PrintMin(int a, int b){
	if(a<b)
		print("%d", a);
	else
		print("%d", b);
}
int main(){
	void(*pf)(int, int);
	int x = 4, y = 5;
	pf = PrintMin;
	pf(x,y);
	return 0;
}

C语言快速排序库函数:
void qsort(void *base, int nelem, unsigned int width, int(*pfCompare)(const void*, const void*))
可以对任意类型的数组进行排序
对数组进行排序需要知道:

  1. 数组其实地址(base)
  2. 数字元素个数(nelem)
  3. 每个元素的大小(width)
  4. 元素谁在前谁在后的规则

pfCompare(e1, e2)
int 比较函数名(const void *elem1, const void *elem2);
比较函数编写规则:

  1. 如果*elem1应该排在*elem2前面,则函数返回值应该为负整数。
  2. 如果无所谓谁在前在后,返回0
  3. 如果*elem1应该排在*elem2后面,则函数返回值应该为正整数。
#include<stdio.h>
#include<stdio.h>
int MyCompare(const void *elem1, const void *elem2)
{
	unsigned int *p1, *p2;
	//*elem1 非法,因为void * 类型不知道大小,必须进行强制转化
	p1 = (unsigned int*) elem1; 
	p2 = (unsigned int*) elem2;
	return (*p1%10)-(*p2%10)//个位数小的排前面
}
int main()
{
	unsigned int an[NUM] = {8, 123, 11, 10, 4};
	qsort(an, NUM, sizeof(unsigned int), MyCompare);
	for(int i = 0; i < NUM; i++)
		print("%d", an[i])
	return 0
}
//10 11 123 4 8
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值