在C中使用函数指针

当我们只需调用该函数就可以使用该函数时,将函数作为参数传递给另一个函数有什么好处。

这是模拟多态和/或回调的一种方法。

在某些情况下,程序或客户端可能受益于客户端入口点。 这是实现这一目标的常用方法。 它可用于改进模块化或改善多个实现的物理分离。

使用函数指针可以创建动态调度行为。 动态“类型”,而不是静态“类型”将“确定”将调用哪个函数。

这个概念在OOP语言中非常重要,可以使用函数指针创建。

因为当写入函数指针的函数时,它不一定知道它应该调用什么函数(我希望这是有道理的)。 此外,可能会要求函数使用不同的函数指针来执行不同的操作。

例如,C库具有qsort()函数。 它需要一个函数指针来执行正在排序的对象的比较。 因此,当qsort()本身被编写时,它(或编写它的程序员)不知道它将被要求排序的是什么类型的对象。 因此,函数指针用于提供该function。

此外,可能会要求qsort()在一次调用中对int进行排序,并在之后立即对struct foo对象进行排序。 传递函数指针允许以这样的方式编写qsort() ,使得它不需要了解被排序的项目。 该信息(被排序的对象的大小以及如何比较它们)可以作为参数传递给它。

正如上面Justin正确指出的那样,它用于模拟多态性和回调。

您可以参考此链接以获取有关函数指针及其使用方法的详细信息。

如果您事先不知道(在编译时)您将使用哪个函数,那么将(函数指针)函数放入变量中是有用的。

就像,当你可以写一个常量42时,使用变量int x有什么好处。