指向函数的指针

inb*_*der 2 c

我觉得我对C中的指针有很好的处理.大多数情况下,我使用它们将数组传递给函数.

但是我注意到在查看许多不同的代码示例时,看到指向函数的指针并不罕见.我一点也不清楚为什么这会有用呢?是否存在一些经典实例,其中指向函数模型的指针是否易于实现或必不可少?

mae*_*ics 9

典型的例子是使用该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)