1 函数指针
通过函数指针,可以调用其指向的函数。例如:
#include <stdio.h>
void print_min(int a, int b)
{
if (a < b)
printf("%d\n", a);
else
printf("%d\n", b);
}
int main()
{
void (*fp)(int, int) = print_min;
fp(4, 5);
return 0;
}
$ gcc a.c && ./a.out
4
函数指针的定义:
返回类型 (*函数指针名)(参数类型1,参数类型2,...);
函数指针的使用方法:
函数指针名(实参表);
再看一个函数指针的例子:C语言快速排序库函数
void qsort (void * base, int nelem, unsigned int width, int (* pf_compare)(const void *, const void *));
base:数组起始地址。
nelem:数组中元素的个数。
width:每个数组元素的大小 (由此可以计算出每个元素的地址)。
pf_compare:比较函数,决定元素先后顺序。
* 如果第一个应该排在前面,返回负整数。
* 如果都可以,返回0。
* 如果第一个应该排在后面,返回正整数。
排序,就是不断比较并交换位置的过程。
练习:按照从小到大的顺序,排列一个整形数组。
#include <stdio.h>
#include <stdlib.h>
int array[] = { 100, 90, 80, 70, 60, 10, 20, 30, 40, 50 };
int compare (const void * a, const void * b)
{
return (*(int *)a - *(int *)b);
}
int main()
{
int nelem = sizeof(array) / sizeof(int);
qsort((void *)array, nelem, sizeof(int), compare);
for (int i = 0; i < nelem; i++)
printf("%d ", array[i]);
printf("\n");
}
# gcc a.c && ./a.out
10 20 30 40 50 60 70 80 90 100