2
A
回答
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);
}
这里,函数“罪()”,“COS()”和“开方()”都具有相同的原型架构:函数采用双参数并返回一个double值。需要注意的是,如果我错误地写道:
generator(0.0, 1.0, 0.02, sin());
我会得到一堆编译错误 - 一个因为“罪()”需要一个参数,而另一个因为“发生器()”需要一个指向一个功能,而不是作为最后一个参数的双重值。
(另请注意,一个好的方案至少会识别它是计算功能,以及双号的重复增量是不准确的好主意。这只是一个例子。)
9
5
3
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;
}
3
是。不是函数本身而是指向函数的指针。
请参阅qsort()
。
int cmp(const void *a, const void *b) { /* ... */ }
/* ... */
qsort(data, nelems, sizeof *data, cmp); /* pass the function `cmp` to qsort() */
相关问题
- 1. 将代码从c#传递给c作为函数参数
- 2. 是否有可能将参数传递给角厂
- 3. 是否有可能将参数传递给jQuery UI滑块
- 4. 是否有可能将承诺的结果作为参数传递给IIFE
- 5. 是否有可能将“this”作为隐式参数传递给Scala?
- 6. 可能将名称作为参数传递给C++模板?
- 7. 是否有可能将Rails变量传递给JavaScript函数?
- 8. 传递函数作为参数传递给其他功能
- 9. 在C++中将函数参数作为函数参数传递
- 10. 是否将参数传递给函数参数?
- 11. C++ - 将rapidjson :: Document作为参数传递给函数
- 12. 将函数作为参数传递给C++时出现错误
- 13. 将函数作为参数传递给C++中的方法
- 14. 将函数作为参数传递给Objective-C方法
- 15. 将c#函数作为参数传递给Javascript
- 16. Python ctypes,将c_void_p作为输出参数传递给c函数
- 17. 将函数作为参数传递给方法C++
- 18. 作为参数传递给函数Javascript
- 19. 将函数数组作为参数传递给函数
- 20. 通Java脚本函数作为参数传递给C++函数
- 21. 您是否可以将函数作为内联函数的参数传递?
- 22. 将C#中的参数作为参数传递给C++中的回调函数
- 23. 是否有可能在XML中传递构造函数参数?
- 24. 将参数作为参数传递给函数?
- 25. 是否有可能将jQuery对象作为构造函数参数传递给打字稿对象?
- 26. 将函数作为参数传递给COM对象函数
- 27. javascript - 将回调函数作为参数传递给函数
- 28. 将值作为函数参数传递给匿名函数
- 29. 将参数传递给函数,该参数必须作为参数传递给python中的另一个函数
- 30. 是否有可能将参数列表/数组传递给C#中的JS函数?
复制的HTTP ://stackoverflow.com/questions/9410/how-do-you-pass-a-function-as-a-parameter-in-c – quamrana 2009-11-08 18:10:09