Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是void(*)(void*)_C++_C_Function Pointers - Fatal编程技术网

C++ 什么是void(*)(void*)

C++ 什么是void(*)(void*),c++,c,function-pointers,C++,C,Function Pointers,可能重复: 类型void(*)(void*)是什么意思 我在《用C掌握算法》一书的示例代码中遇到了这种类型 这是一个函数指针 void (*destroy)(void *data) destroy是指向函数的指针,该函数返回void,并将void*作为参数 是识别复杂C声明的有用工具。另外,请看一看。在这个特定的例子中,它是一个指针,任何函数都可以被强制转换为void(*)(void*),函数参数void*可以是任何类型。一个函数指针,指向一个以void指针为参数的函数。螺旋规则:指向一个函

可能重复:

类型void(*)(void*)是什么意思

我在《用C掌握算法》一书的示例代码中遇到了这种类型


这是一个函数指针

void (*destroy)(void *data)
destroy
是指向函数的指针,该函数返回
void
,并将
void*
作为参数


是识别复杂C声明的有用工具。另外,请看一看。

在这个特定的例子中,它是一个指针,任何函数都可以被强制转换为void(*)(void*),函数参数void*可以是任何类型。

一个函数指针,指向一个以void指针为参数的函数。螺旋规则:指向一个函数的指针,指向void,但不返回任何内容。顺便说一下,如果您使用的是C++11,那么它将变成
std::function
,更具可读性和实用性。在这样做时,如果您想要任何类型,您可以用模板替换
void*
。感谢您的回复。我只是认为作者使用这个函数指针将函数“free(void*)”(stdlib.h)分配给函数指针“destroy”。这不是最容易理解的方法。尽管存在可读性问题,但有人知道这可能有用的好理由吗?我不确定我在这里的评论是否足够清楚。我不知道是否可以在这里发布整个代码(版权)。@user1535080
destroy
是一个参数,
free
不是唯一可能的参数。“这不是最具可读性的解决方法”——你会怎么做?“有人知道这可能有用的好理由吗”——是的;将任意的“销毁”函数传递给<代码> ListSyIn < /C> > @ USE1535080:考虑允许自定义的分配程序的类型。函数原型返回
void
,并将
void*
作为参数,但您可能希望自己进行释放(自我管理堆)或只是执行一些日志记录。这使您可以分配具有特定签名的任何函数来处理解除分配。我意识到函数指针语法一开始似乎很奇怪,但这是C语言,在你获得一些经验之后,你不会认为它是不可读的(另外,正如Jim所说,你还会怎么做呢?)这种语法对哪些编译器是合法的?由于使用“void(*)(void)”“语法错误”,R包igraph无法在CRAN Solaris服务器上编译:您是否也可以在不使用括号的情况下将其编写为
void*destroy(void*data)
void (*destroy)(void *data)