实例:
用C语言中qsort库函数,将一个unsigned int数组按照个位数从小到大进行排序。
1.函数指针定义:
类型名( *指针变量名)(参数类型1, 参数类型2, …);
如:int (*pr)(int,char);
2.调用:
函数指针名(实参表)
如:pr = myFun;//把自己定义的函数赋值给pr这个函数指针
pr(x,y);//可以直接用pr调用myFun这个函数
3.C语言中qsort库函数:
void qsort(void *base, int nelem, unsigned int width, int(* pfCompare)(const void *, const void *)
四个参数:
数组的起始地址:base
数组元素个数:nelem
数组元素大小:width
排序前后规则:int(* pfCompare)(a, b) //函数指针定义
返回值包含以下三种情况:
负整数:a在前,b在后;
0:哪个参数在前都可以;
正整数:a在后, b在前。
实例解答:
#include <strio.h>
#include <stdlib.h>
int MyCompare(const void * elem1, const void * elem2)
{
unsigned int * p1, * p2; //p1,p2定义为unsigned int类型,所以下面要强制类型转换
p1 = (unsigned int *) elem1; // "* elem1" 非法
p2 = (unsigned int *) elem2; // "* elem2" 非法
return (*p1 % 10) - (*p2 % 10)
}
#define NUM 5
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++)
{
printf("%d", an[i]) // output: 10 11 123 4 8
}
return 0;
}