C 什么是';无效(*返回插座)(无效*闭合)';什么意思?

C 什么是';无效(*返回插座)(无效*闭合)';什么意思?,c,syntax,xcb,C,Syntax,Xcb,我正在浏览XCB源代码,发现了这个奇怪的结构成员: void (*return_socket)(void *closure); 这是什么意思?写这个的另一种方式是什么 这是一个函数指针。 它指向一个返回void并接收void*作为参数的函数 例如,您可以将其用作: void myFunction(void *closure) { printf("myFunction called with closure=%p", closure); } void (*return_socket)(

我正在浏览XCB源代码,发现了这个奇怪的结构成员:

void (*return_socket)(void *closure);

这是什么意思?写这个的另一种方式是什么

这是一个函数指针。 它指向一个返回
void
并接收
void*
作为参数的函数

例如,您可以将其用作:

void myFunction(void *closure)
{
    printf("myFunction called with closure=%p", closure);
}

void (*return_socket)(void *closure) = myFunction;

这是一个函数指针。 它指向一个返回
void
并接收
void*
作为参数的函数

例如,您可以将其用作:

void myFunction(void *closure)
{
    printf("myFunction called with closure=%p", closure);
}

void (*return_socket)(void *closure) = myFunction;

它是一个指向函数的
指针
,需要一个指向某些数据(尽管文档或代码会告诉你是什么)的指针作为参数,但不返回任何内容。它是一个指向函数的
指针
,需要一个指向某些数据(尽管文档或代码会告诉你什么)的指针作为参数,并且不返回任何内容。
return\u socket
是变量名。函数名不使用标识符,而是使用星号和标识符指示它是函数指针。您可以稍后使用
return\u socket=myFunction2否。您没有将
malloc
定义为
void*(size\u t)malloc,是吗?您定义了
void*malloc(size\u t)
,对吗?您只需添加括号,表明星号与函数名相关,使其成为
函数指针,而不是返回值。正是括号包围了参数列表,使其成为函数类型。
return\u socket
周围的括号不是该类型的一部分,仅用于消除
*
的歧义。也许这更清楚:
typedef void MyFuncT(void*);MyFuncT*返回_套接字C使用这个“中缀”符号进行声明和使用。你的建议在逻辑上是一致的,只是C选择了不这样做。同样的原理,为什么我们有
inta[10]而不是
int[10]a
return\u socket
是变量名。函数名不使用标识符,而是使用星号和标识符指示它是函数指针。您可以稍后使用
return\u socket=myFunction2否。您没有将
malloc
定义为
void*(size\u t)malloc,是吗?您定义了
void*malloc(size\u t)
,对吗?您只需添加括号,表明星号与函数名相关,使其成为
函数指针,而不是返回值。正是括号包围了参数列表,使其成为函数类型。
return\u socket
周围的括号不是该类型的一部分,仅用于消除
*
的歧义。也许这更清楚:
typedef void MyFuncT(void*);MyFuncT*返回_套接字C使用这个“中缀”符号进行声明和使用。你的建议在逻辑上是一致的,只是C选择了不这样做。同样的原理,为什么我们有
inta[10]而不是
int[10]a