【问题标题】:What does 'void (*return_socket)(void *closure);' mean?'void (*return_socket)(void *closure);' 是什么意思意思是?
【发布时间】:2014-04-15 21:33:38
【问题描述】:

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

void (*return_socket)(void *closure);

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

【问题讨论】:

  • 这是一个pointer to a function,需要一个函数,该函数需要一个指向某些数据的指针(尽管文档或代码会告诉你什么)作为参数,并且什么也不返回。

标签: c syntax xcb


【解决方案1】:

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

例如,您可以将其用作:

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

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

【讨论】:

  • return_socket 是变量名。代替 identificator 作为函数名,您使用 asteriskidentificator 来表示它是函数指针。您可以稍后使用 return_socket = myFunction2; 分配给它
  • 没有。您没有将malloc 定义为void *(size_t) malloc;,对吗?你定义void *malloc(size_t),对吧?
  • 您只需添加括号以指示星号与函数名称相关,使其成为function pointer,而不是返回值。
  • 正是括号内的参数列表使其成为函数类型。 return_socket 周围的括号不是类型的一部分,仅用于消除 * 的歧义。也许这更清楚:typedef void MyFuncT(void *); MyFuncT *return_socket;
  • C 使用这个“中缀”符号进行声明和使用。您的建议在逻辑上是一致的,只是 C 选择不那样做。为什么我们有int a[10]; 而不是int[10] a; 的原理相同。
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 2012-03-11
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多