程序运行期间,每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数的入口地址赋给一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以调用这个函数。这种指向函数的指针变量称为“函数指针”。
类型名 (* 指针变量名)(参数类型1, 参数类型2,…);
例如: int (* pf)(int,char)
表示 pf 是一个函数指针,它所指向的函数,返回值类型应是int,该函数应有两个参数,第一个是int 类型,第二个是char类型。
可以用一个原型匹配的函数的名字给一个函数指针赋值。要通过函数指针调用它所指向的函数,写法为:
函数指针名(实参表);
#include <stdio.h>
void PrintMin(int a,int b) {
if( a<b )
printf("%d",a);
else
printf("%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: 待排序数组的每个元素的大小(以字节为单位),sizeof(T) pfCompare :比较函数的地址,直接写比较函数的名字
排序就是一个不断比较并交换位置的过程。
qsort函数在执行期间,会通过pfCompare指针调用 “比较函数”,调用时将要比较的两个元素的地址传给“比较函数”,然后根据“比较函数”返回值判断两个元素哪个更应该排在前面。