0

在以下函数中,对于回调函数start_routine,返回类型为void **

 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
               void *(*start_routine) (void *), void *arg);

但是当我们定义回调函数时,是这样的:

void func(void *)

我知道它是一个函数,但我认为至少回调函数应该是这样的:

void* func(void *);

我哪里错了?谢谢!

4

1 回答 1

0

void func(void *)只是一个正常的函数,它什么都不返回并且需要一个void*. 它不能作为函数的参数放置。

void* func(void *)与上面类似,唯一的区别是它返回一个void*指针。

回调函数如下所示return_type (*function_name)(arguments)。这里,一个例子是void* (*start_routine)(void *)。这是一个有效的函数参数。

pthread_create函数将一个指向函数的指针作为它的倒数第二个参数,该函数start_routine的返回类型是void*并且只有一个 type 参数void*

此页面的摘录:http ://www.cprogramming.com/tutorial/function-pointers.html

有时,当更多的星星被扔进去时,人们会感到困惑:

void *(*foo)(int *);

在这里,关键是由内而外地阅读;注意表达式的最里面的元素是*foo,否则它看起来像一个普通的函数声明。*foo应该引用一个返回 avoid*并接受一个int*. 因此, foo 就是一个指向这样一个函数的指针。

于 2013-07-05T17:40:53.980 回答