void*(*)(void*)何解?
参数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在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。
有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
首先这并不是一个具体的函数指针,(因为没有指针名字) 而是一个抽象出来的函数指针的模型 ,用来为专门应对这一类事物的复杂交互提供便利, 比如有了类型就能声“名”出未初始化的对象用来做参数甚至为该类事物提供动态分配的没名字的对象 , 以及批量操作对象。
(这样通过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/“
另外:
通过学习了解函数的重载 ,我们可以了解到一个函数的 类型 由函数的 返回值类型 以及其参数类型 及 参数个数 来决定 ,就好像 数组 不仅要有数组元素的类型 还要有数组的维度及各个维度的步长。
可是这个一整个就是一个函数的参数啊
难道的函数指针可以使一个函数的参数吗?
函数指针是可以作为某个函数的参数的,你百度下就可以查阅到相关的文章
类似这种
typedef void (*FunType)(int ); //. 定义一个函数指针类型FunType,
void CallMyFun(FunType fp,int x);
那如果把这个放在一个函数参数的位置,则表示该参数为上述类型的函数指针。
例如:
int Fun(void*(*pfun)(void*));则表示声明一个函数名为fun的函数,该函数的参数是一个函数指针,名字为pfun,该函数指针指向的函数是——的参数为void*类型,函数的返回值为void*类型的函数。
可以定义一个函数,将函数名(即函数指针)传入上述函数fun。
定义函数指针:void* FunToInput(void* pvoid){}
传入原函数:Fun(FunToInput);
广告 您可能关注的内容 |