c语言指向函数的指针
‘壹’ c语言如何定义一个指向指针函数的函数指针
void*f(int);//一个指针函数f
void*(*p)(int)=f;//一个指向f的函数指针p
‘贰’ C语言指向函数指针问题
#include
<stdio.h>
void
main()
{
int
max(int
,int
);
int
(*p)(int
,int);
p=max;
//此处利用
p=max是正确的指向函数的指针的用法,p指向max的入口地址
//此处用*p=max得到相同结论,为什么呢?因为你这样赋值之后*p的内容就是max
//所以在执行(*p)(q,w)它时其实是执行的(max)(q,w),如果是p=max此时执行(*p)(q,w)是等价于执行max(q,w)。
int
q,w;
printf("please
input
the
two
numbers:\n");
scanf("%d%d",&q,&w);
printf("the
larger
number
is:%d",(*p)(q,w));
}
////////////////////////////////////
int
max(int
a,int
b)
{
if(a>b)
return
a;
else
return
b;
}
‘叁’ C语言中函数指针用法
在C语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一。看下面这段代码:#include <stdio.h>void F(int a, int* output)
{
printf("a = %d\n", a);
*output = a + 1;
}typedef void (*FUNC)();int main()
{
FUNC f = F;
int ret = 0;
f(3, &ret);printf("ret = %d\n", ret);
return 0;
}上面看出 FUNC 的类型是与F的类型不匹配的,这样可以通过编译吗?答案是: 可以的。由于在C语言中编译函数的时候,是仅仅将其函数名作为该函数的
唯一标识,为其分配相应地址。所以虽然FUNC 与 F的类型不一致,但是对于编译器看来
都是两个地址,是无所谓的。用上面的特点,可以写出非常通用的函数指针类型,typedef int (*FUNC)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志。 随说做了有一段时间的C了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!一般有两种用法:1定义函数指针int (*functionPoint)(int, int)----这只是定义了一个指向函数的指针int a(int a,int b)----------------这是与之相符的函数原型void main()-----------------------使用{ functionPoint = a;------------先赋值 functionPoint(1,2);----------调用
}2用typedef定义使用typedef int (*functionPoint)(int,int);----------定义了一种类型名为functionPoint的指针int a(int a, int b)-----------------------------函数原型void main(){ functionPoint fun;---------------------------定义指针 fun = a;-------------------------------------赋值 fun(1,2);---------------------------------使用
}函数就是这个函数的指针.
‘肆’ c语言中函数指针是什么 有什么用 举个实例
函数指针指函数的入口地址,作用就是跳转。比如设置回调函数,线程函数、结构体中的成员函数等。
回调:
typedefvoid(WINAPI*USBCALLBACK)(bool,bool);//回调函数
……
USBCALLBACKpCallBack;
voidSetCallBack(USBCALLBACKUSBCallBack)//回调,指定设备接入或拔出
{
pCallBack=USBCallBack;
}
线程
DWORDWINAPIDataHandleThread(LPVOIDlParam)//处理数据线程
{
//TODO:
}
……
m_hDataHandle=CreateThread(NULL,0,DataHandleThread,this,0,NULL);//启动线程
结构体
typedefstructLUNARHANDLE
{
bool(*GetLunar)(intiYear,intiMonth,intiDay,LUNARDATE*lunardate);
};
以上这几种用法都摘自我自己的项目,请参考。
‘伍’ C语言指向函数的指针 求翻译
#include<stdio.h>
intf1(int(*f)(int));//函数指针
intf2(inti);
intmain(void)
{
printf("Answer:%d ",f1(f2));//指向f2
return0;
}
intf1(int(*f)(int))//定义函数指针
{
intn=0;
while((*f)(n))n++;//回调函数,当指针不是NULL时,代入n
return0;
}
intf2(inti)
{
returni*i+i-12;
}
//也就是每个函数入口都是一个地址
//函数无它,唯指令集合而已,上面只是换个地址执行指令而已
‘陆’ 如何定义指向函数的指针
一、定义一个函数指针的方法如下:
返回值类型 (* 指针变量名)([形参列表]);
1、int func(int x); /* 声明一个函数 */
2、int (*f) (int x); /* 声明一个函数指针 */
3、f=func; /* 将func函数的首地址赋给指针f */
二、函数指针的用法:
函数指针的应用:(*指针变量名)(参数列表)
如:int c=(*ptr)(a,b);/* 函数指针 的使用*/
在C语言中,函数本身不是变量,但是可以定义指向函数的指针,也称作函数指针,函数指针指向函数的入口地址。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值等等。
(6)c语言指向函数的指针扩展阅读:
指针函数和函数指针的区别:
1、这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
2、返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
‘柒’ C语言指向函数的指针的调用
#include<stdio.h>
int *d_bubblesort(int a[],int n)//数组长度为n的冒泡降序排序
{
int i,j;
int temp;
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j]>a[j-1])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
return a;
}
void main()
{
int i;
int *p=NULL;
int a[10]={6,5,4,1,2,3,9,8,7,10};
int *(*fun)(int*,int);
fun=d_bubblesort;
p=fun(a,10);
for(i=0;i<10;i++)
{
printf("%d\t",p[i]);
}
}
‘捌’ C语言——指向函数的指针
c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,
调用函数(fun)时看情况而给函数传入不同的函数指针
例如fun(a,b,min),那么fun函数调用执行三个参数就调用min函数
参数的定义要与传入的函数指针相匹配
例如fun(int,x,int y,(*p)(int,int)) 那么调用fun(a,b,min)时,min的参数必须是(int ,int)