指针函数一般是指返回指针的函数
#包含
int*fun(int*a ) )
{
返回a;
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
int a=3;
printf('%d ',* ) fun ) ) a );
返回0;
}
函数指针是指示函数起始地址的指针。
首先,需要了解函数的调用步骤。
#包含
intfun(intI ) )。
{
返回I 1;
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
int r;
//r=fun(5;
r=((fun ) ) 5; //调用方式
printf(%d(n ),r );
返回0;
}
函数为r=(*fun ()5); 调用以指示函数名称是指针。
用(fun )指定地址。 可以定义指针
#包含
intfun(intI ) )。
{
返回I 1;
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
int r;
int(*funp ) ) int; //声明指针
//funP=fun; //为指针赋值
funP=fun;
r=funp(5;
printf(%d(n ),r );
返回0;
}
因此,为函数指针赋值也有两种方法
同样,通过函数指针调用函数的方法也有两种。
#包含
intfun(intI ) )。
{
返回I 1;
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
int r;
int(*funp ) ) int; //声明指针
funP=fun; //为指针赋值
//r=funp(5;
r=((funp ) ) 5; //调用
printf(%d(n ),r );
返回0;
}
也就是说,fun ()和() fun ) )的作用相同,但声明的地方除外。
这样,c语言就更容易实现类似回调函数的结构。
#包含
intfuna(intI ) )。
{
返回I 1;
}
intfunb(intI ) )。
{
返回I-1;
}
voidfun(int(*funp ) ) int ),int i ) )。
{
printf('%dn ',funP(i ) ) I );
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
int(*funp ) ) int; //声明指针
funP=funA; //为指针赋值
//funP=funB; //为指针赋值
fun(funp,5 ); //调用
返回0;
}
fun ) )函数中,在某个时候只调用funP指针指向的函数,在fun函数的定义中还不知道是哪个函数。 在将funA分配给函数指针funP之前,funP不确定具体具有什么功能。
也就是说,main函数确定fun函数需要实现什么样的函数代码,但fun ()决定何时调用fun以及main是否调用他的函数。