典型的例子是使用该qsort函数对元素数组进行排序.它的最后一个参数是一个函数指针,它指向比较两个元素的例程,作为void指针传递.
void qsort(void *base,
size_t nmemb,
size_t size,
int(*compar)(const void *, const void *));
Run Code Online (Sandbox Code Playgroud)
在这里使用函数指针是必不可少的,因为排序例程不能足够通用以了解你想要如何比较元素,所以函数指针本质上是一个"回调",sort函数用它来扩展它.
[编辑]例如,假设您定义了以下结构:
struct president {
char * fname;
char * lname;
unsigned int number;
};
Run Code Online (Sandbox Code Playgroud)
如果你想通过它们的"数字"字段对它们的数组进行排序,你可以实现一个"比较"(比较器)函数,如下所示:
int compare_presidents(const void * v1, const void * v2) {
struct president p1 = * ((struct president *) v1);
struct president p2 = * ((struct president *) v2);
return (p1.number - p2.number); // Compare by number ascending.
}
Run Code Online (Sandbox Code Playgroud)
你可以对这样的结构进行排序:
qsort(presidents, num_presidents, sizeof(struct president), compare_presidents);
Run Code Online (Sandbox Code Playgroud)