【发布时间】:2014-04-15 21:33:38
【问题描述】:
我正在浏览 XCB 资源,发现了这个奇怪的结构成员:
void (*return_socket)(void *closure);
这是什么意思?写这个的另一种方式是什么?
【问题讨论】:
-
这是一个
pointer to a function,需要一个函数,该函数需要一个指向某些数据的指针(尽管文档或代码会告诉你什么)作为参数,并且什么也不返回。
我正在浏览 XCB 资源,发现了这个奇怪的结构成员:
void (*return_socket)(void *closure);
这是什么意思?写这个的另一种方式是什么?
【问题讨论】:
pointer to a function,需要一个函数,该函数需要一个指向某些数据的指针(尽管文档或代码会告诉你什么)作为参数,并且什么也不返回。
那是一个函数指针。
它指向一个返回void并接收void *作为参数的函数。
例如,您可以将其用作:
void myFunction(void *closure)
{
printf("myFunction called with closure=%p", closure);
}
void (*return_socket)(void *closure) = myFunction;
【讨论】:
return_socket 是变量名。代替 identificator 作为函数名,您使用 asterisk 和 identificator 来表示它是函数指针。您可以稍后使用 return_socket = myFunction2; 分配给它
malloc 定义为void *(size_t) malloc;,对吗?你定义void *malloc(size_t),对吧?
function pointer,而不是返回值。
return_socket 周围的括号不是类型的一部分,仅用于消除 * 的歧义。也许这更清楚:typedef void MyFuncT(void *); MyFuncT *return_socket;
int a[10]; 而不是int[10] a; 的原理相同。