是否可以将函数作为参数传递给c?

时间:2009-11-08 18:04:54

标签: c

  

可能重复:
  How do you pass a function as a parameter in C?

是否可以将函数作为c中的参数传递?如果是的话怎么样?

6 个答案:

答案 0 :(得分:9)

使用指针功能。
int (*ptr2_fun)()一样 接收功能是:
 int execute_your_function(int (*fun)())

这里有一些examples

答案 1 :(得分:7)

不,您不能将'function'作为参数传递。但是,您可以将指针传递给函数。

当您按名称引用函数而没有函数调用的括号时,您将引用指向函数的指针。因此,例如,我们可以考虑一个为数学函数生成值表的函数:

#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);
}

这里,函数'sin()','cos()'和'sqrt()'都具有相同的原型模式:函数采用double参数并返回double值。请注意,如果我错误地写道:

generator(0.0, 1.0, 0.02, sin());

我会得到一堆编译错误 - 一个是因为'sin()'需要一个参数,另一个因为'generator()'需要一个指向函数的指针而不是一个double值作为最后一个参数。

(另请注意,一个好的程序至少会识别它正在计算的函数,并且重复的双数增量对于准确性来说不是一个好主意。这只是一个例子。)

答案 2 :(得分:5)

答案 3 :(得分:3)

这里有很棒的函数指针教程:

http://www.newty.de/fpt/index.html

答案 4 :(得分:3)

当然,你可以使用函数指针。

#include <stdio.h>
typedef void (*bar_callback)(void);

void foo(void)
{
  puts("foo");
}

void bar(bar_callback callback)
{
  puts("bar");
  callback();
}
int main(int argc,char **argv)
{
  bar(foo);
  return 0;
}

答案 5 :(得分:3)

即可。不是函数本身,而是指向函数的指针。

请参阅qsort()

int cmp(const void *a, const void *b) { /* ... */ }
/* ... */
qsort(data, nelems, sizeof *data, cmp); /* pass the function `cmp` to qsort() */