这是一个奇怪的标题。如果有人能够澄清我究竟在问什么,因为我不太确定我自己,我将不胜感激。如何在函数中传递函数?
我看对编程范式斯坦福视频(即老师真棒),我最多第五部影片的时候就开始这样做:
void *lSearch(void* key, void* base, int elemSize, int n, int (*cmpFn)(void*, void*))
当然,我对自己说,“喂,我不知道你可以声明一个函数并在以后定义它!“。所以我创建了我自己的C++测试版本。
int foo(int (*bar)(void*, void*));
int bar(void* a, void* b);
int main(int argc, char** argv)
{
int *func = 0;
foo(bar);
cin.get();
return 0;
}
int foo(int (*bar)(void*, void*))
{
int c(10), d(15);
int *a = &c;
int *b = &d;
bar(a, b);
return 0;
}
int bar(void* a, void* b)
{
cout << "Why hello there." << endl;
return 0;
}
有关代码的问题是这样的:如果我声明功能int *bar
为foo
参数失败,但不int (*bar)
。为什么!?
此外,视频让我困惑的事实,他的lSearch定义
void* lSearch(/*params*/ , int (*cmpFn)(void*, void*))
呼吁cmpFn的定义,但在调用lSearch功能
lSearch(/*params*/, intCmp);
还调用定义的函数int intCmp(void* elem1, void* elem2);
我当不明白那是如何工作的。为什么在lSearch中是叫做cmpFn的函数,但定义为intCmp,它的类型为int
,而不是int*
,仍然有效?为什么lSearch中的函数不必定义参数?
是这样的: http://yoyodawgdawg.com/pics/yo-dawg-functions.jpg – 2010-06-10 18:03:09
另请参阅此问题:http://stackoverflow.com/questions/2592137/。 – sbi 2010-06-10 18:10:35
恭喜,你已经发现了更高阶的函数:) – fredoverflow 2010-06-10 18:24:22