定义:
顾名思义,函数指针就是指向函数的指针变量。
定义形式:
类型名(*指针变量名)(参数类型1,参数类型2,...)
void(*pf)(int, int); //指向返回值为void函数的指针,函数的形参有两个,都为int类型。
qsort函数:
qsort函数是C语言快速排序库函数,可以对任意类型的数组进行排序。
void qsort(void *base, int nelem, unsigned int width,
int(*pfCompare)(const void*, const void*));
base:待排序数组的起始地址,
nelem:待排序数组的元素个数,
width:待排序数组的每个元素的大小(以字节为单位),
pfCompare:比较函数的地址(由程序员自己编写)。
int 比较函数名(const void *elem1, const void *elem2);
比较函数编写规则:
1) 如果*elem1应该排在*elem2前面,则函数返回值是负整数
2) 如果*elem1和*elem2哪个排在前面都行,那么函数返回0
3) 如果*elem1应该排在*elem2后面,则函数返回值是正整数
实例:
1 #include<stdio.h> 2 #include<stdlib.h>//qsort函数的头文件 3 int MyCompare(const void *elem1, const void* elem2) { 4 //自定义比较函数 5 unsigned int *p1, *p2; 6 p1 = (unsigned int*)elem1; 7 p2 = (unsigned int*)elem2; 8 return (*p1 % 10) - (*p2 % 10); 9 } 10 #define NUM 5 11 int main() { 12 unsigned int an[NUM] = { 8,123,11,10,4 }; 13 qsort(an, NUM, sizeof(unsigned int), MyCompare); 14 for (int i = 0; i < NUM; i++) { 15 printf("%d ", an[i]); 16 } 17 return 0; 18 } 19 20 /* 21 输出结果: 22 10 11 123 4 8 23 */