void*(*)(void*)何解?

 我来答
热爱学习的Genji
高粉答主

2020-06-16 · 说的都是干货,快来关注
知道小有建树答主
回答量:1894
采纳率:100%
帮助的人:28.1万
展开全部

参数void*(*)(void*)是一个函数指针,前面的void为返回值类型,后面的void*为参数类型。

指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)(函数参数列表)

函数名是可以缺省的,作为参数传递的时候会去调和void*(*)(void*)这个类型相匹配的函数的。

例如:

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = &func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

扩展资料:

“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。

有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

坑爹退散死绝e08
2013-04-20 · TA获得超过465个赞
知道答主
回答量:66
采纳率:0%
帮助的人:18.2万
展开全部
楼上第一次回答明显是错误 并误导人的,这表明楼上理解的并不深刻。 所以才会造成你的追问。并且继续误导后面看这个帖子的人。本着对民族的责任我特此订正如下:

首先这并不是一个具体的函数指针,(因为没有指针名字) 而是一个抽象出来的函数指针的模型 ,用来为专门应对这一类事物的复杂交互提供便利, 比如有了类型就能声“名”出未初始化的对象用来做参数甚至为该类事物提供动态分配的没名字的对象 , 以及批量操作对象。

(这样通过new \ delete产生这样的数据 就能达到灵活控制堆空间 在通过为多个函数实例提供共享引用该外部数据的功能的基础上 在函数不再用它的时候即时delete掉, 既减少了栈的消耗也实现了程序运行期对堆空间使用的收缩控制)。

函数指针类型的定义我就不再重复楼上已经解释过的,我提一些他疏漏的。
格式:
函数返回值数据类型 (*指针变量名)(函数的实际参数或者函数参数的类型)

上面是解答你问题的基础但是还不够 还要加上自定义类型typedef 的知识;
你尝试如下自定义函数指针类型 就明白其用法了:
\\kkk为自定义类型的名字

typedef void* (*kkk)(void* ,char*);

kkk p 就等于 void* (*p)(void* ,char*);\\ p才是该类型 实例的名字
详见:
”h——ttp://blog.163.com/dahai_boy/blog/static/32550066201102143228870/“

另外:
通过学习了解函数的重载 ,我们可以了解到一个函数的 类型 由函数的 返回值类型 以及其参数类型 及 参数个数 来决定 ,就好像 数组 不仅要有数组元素的类型 还要有数组的维度及各个维度的步长。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anglerbug_
推荐于2018-02-27 · TA获得超过6.9万个赞
知道大有可为答主
回答量:9104
采纳率:75%
帮助的人:3498万
展开全部
这是个函数指针 前面的void为返回值类型 后面的void*为参数类型
更多追问追答
追问
可是这个一整个就是一个函数的参数啊
难道的函数指针可以使一个函数的参数吗?
追答
函数指针是可以作为某个函数的参数的,你百度下就可以查阅到相关的文章

类似这种
typedef void (*FunType)(int ); //. 定义一个函数指针类型FunType,
void CallMyFun(FunType fp,int x);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
已经超越神了
2018-06-22
知道答主
回答量:3
采纳率:0%
帮助的人:3074
展开全部
这行的意义是:定义一个不具名(没有名字)的函数指针,这个函数指针指向一个函数,函数的参数为void*类型,函数的返回值为void*类型。
那如果把这个放在一个函数参数的位置,则表示该参数为上述类型的函数指针。
例如:
int Fun(void*(*pfun)(void*));则表示声明一个函数名为fun的函数,该函数的参数是一个函数指针,名字为pfun,该函数指针指向的函数是——的参数为void*类型,函数的返回值为void*类型的函数。
可以定义一个函数,将函数名(即函数指针)传入上述函数fun。
定义函数指针:void* FunToInput(void* pvoid){}
传入原函数:Fun(FunToInput);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wsj99868900
2015-11-18 · TA获得超过5712个赞
知道小有建树答主
回答量:250
采纳率:60%
帮助的人:46.1万
展开全部
这位兄才回答的很好,就是最后一句话说反了,在声明的时候是可以省略掉参数名的,但是在定义的时候却不行,我想楼主应该是在函数声明中找到这段代码的吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式