这是一个函数指针(或指向函数的指针)。
void(*pfn)(void*)
这被细分这样:
*pfn
(void *)
(这些是参数的函数,即(指针即指向函数的名称)一个简单的指针任何东西)
void
(这是从函数返回)
所以,如果你有这样的功能:
void DoSomeThing(void *data) {
... does something....
}
那么你可以把它传递到像这样的CreateThread
功能...
int i = 99;
void * arg = (void*)&i;
pthread_t thread = CreateThread(DoSomeThing, arg, ... other parameters ...);
所以在某处它CreateThread
将拨打电话:
pfn(parg);
和您的函数DoSomeThing将被调用,并且您将获得void * data
您将通过的arg。
更多信息:
记住,代码只是在内存中的字节序列。这就是CPU如何解释它们,使它们与我们称之为数据的东西不同。
因此,在程序中的任何一点,我们都可以通过它的内存地址来引用代码的另一部分。由于代码被分解为C中的函数,这是C理解的有用重用单元,允许我们将函数的地址作为另一个指向某些数据的指针。
在上面的示例中,CreateThread函数需要函数的地址,以便它可以在新线程中执行该函数。所以我们传递一个指向该函数的指针。因此,我们通过它函数指针。
这应该列在任何像样的书中。但是,如果你不知道它是什么,就没有简单的方法来找到它。 – SLaks 2011-06-01 21:59:38
如果你问我,C和C++中的函数指针语法真的很讨厌。 – 2011-06-01 22:04:06
好问题 - 这就是所有关于 – 2011-06-01 22:14:31