在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*))
可以对任意类型的数组进行排序
对数组进行排序需要知道:
- 数组其实地址(base)
- 数字元素个数(nelem)
- 每个元素的大小(width)
- 元素谁在前谁在后的规则
pfCompare(e1, e2)
int 比较函数名(const void *elem1, const void *elem2);
比较函数编写规则:
- 如果*elem1应该排在*elem2前面,则函数返回值应该为负整数。
- 如果无所谓谁在前在后,返回0
- 如果*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
本文介绍了C++中的函数指针概念,包括定义方式,并以C语言的快速排序库函数qsort为例,解释了如何使用函数指针进行排序。qsort函数需要传入数组起始地址、元素个数、元素大小以及一个比较函数,比较函数用于确定排序规则,返回值决定了元素的前后顺序。
604

被折叠的 条评论
为什么被折叠?



