我认为 C 中的经典示例是 qsort。从那里引用(我知道它是http://www.cplusplus.com,所以不是很好的网站,但它似乎是正确的)
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
比较两个元素的函数。该函数应遵循此原型:
int comparator ( const void * elem1, const void * elem2 );
函数必须接受两个参数,它们是指向元素的指针,类型转换为 void*。应该将这些参数转换回某些数据类型并进行比较。
这个函数的返回值应该通过分别返回负值、零或正值来表示elem1是否被认为小于、等于或大于elem2。
另一个“经典”示例是计算器(例如参见this,它是 C++,但在 C 中是相同的)。
例如,您有四个数学函数
float Plus (float a, float b) { return a+b; }
float Minus (float a, float b) { return a-b; }
float Multiply(float a, float b) { return a*b; }
float Divide (float a, float b) { return a/b; }
以某种方式选择您的操作
/* Here there should be an if or a switch/case that selects the right operation */
float (*ptrFunc)(float, float) = Plus;
并且您可以稍后调用它(出于某种原因,您不想直接在 if/switch 中调用它,可能是因为您想制作所有操作“通用”的其他“事物”,例如日志记录或打印结果)
float result = ptrFunc(1.0f, 2.0f);
您可以使用函数指针的另外两件事是回调(由vine'th 编写)和“可怜的人”虚函数(将它们放在struct 中以及在创建struct 时(你知道,就像使用“穷人”构造函数,但这是 C,所以我们将其称为初始化程序),你保存在那里 struct 将使用哪些函数。