不,您不能将"函数"作为参数传递.但是,您可以将指针传递给函数.
当您通过名称引用函数而没有函数调用的括号时,您将引用指向函数的指针.因此,例如,我们可以考虑一个为数学函数生成值表的函数:
#include <math.h>
#include <stdio.h>
static void generator(double lo, double hi, double inc, double (*function)(double))
{
double x;
for (x = lo; x < hi; x += inc)
printf("x = %6g; f(x) = %6g\n", x, (*function)(x))
}
int main(void)
{
generator(0.0, 1.0, 0.02, sin);
generator(0.0, 1.0, 0.02, cos);
generator(0.0, 1.0, 0.02, sqrt);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
这里,函数'sin()','cos()'和'sqrt()'都具有相同的原型模式:函数采用double参数并返回double值.请注意,如果我错误地写道:
generator(0.0, 1.0, 0.02, sin());
Run Code Online (Sandbox Code Playgroud)
我会得到一堆编译错误 - 一个是因为'sin()'需要一个参数,另一个因为'generator()'需要一个指向函数的指针而不是一个double值作为最后一个参数.
(另请注意,一个好的程序至少会识别它正在计算的函数,并且重复的双数增量对于准确性来说不是一个好主意.这只是一个例子.)