一直觉得函数指针是个很难的东西,其实函数指针和一般的指针一样,挺简单的。
一,函数指针的定义
函数指针,顾名思义就是指向函数的指针,就是指向函数存储区域起始地址的指针。先看一下它是如何声明的:
char* (*pf)(char *,char *);
这条语句声明了一个指向函数的指针,这个函数有俩个字符指针的参数,也返回一个字符指针。
有时候容易搞错函数指针和一般的函数声明,比如说:
char *fun(char *,char *);
char **fun(char *,char *);
第一条语句声明了一个函数,它有俩个字符指针参数,也返回一个字符指针。注意这条语句和上一条的区别,函数指针要用小括号括起来。
第二条语句也声明了一个函数,它返回的是一个指针的指针。
有时候情况很复杂,只要从最里面开始分析,细心点应该能分析出来是什么声明。
二,函数指针的使用
函数指针的使用和一般的额指针一样,声明之后赋值,然后用(*)符号来运行这个函数就行了。下面是一个简单的例子:
#include <stdio.h>
#include <string.h>
char* fun(char *a,char *b)
{
if(strlen(a)>=atrlen(b))
{
return a;
}
else
{
return b;
}
}
int main()
{
char* (*pf)(char *,char *);
char *p;
pf=&fun;//也可以直接用pf=fun来赋值
p=(*pf)("111","10"); //用(*)号来运行函数
printf("%s\n",p);
return 0;
}
也和一般的指针数组一样,下面是一个小例子:
#include <stdio.h>
char *fun1(char *a)
{
printf("%s\n",a);
return a;
}
char *fun2(char *a)
{
printf("%s\n",a);
return a;
}
char *fun3(char *a)
{
printf("%s\n",a);
return a;
}
int main()
{
char* (*pf[3])(char *a);
pf[0]=&fun1;//依次赋值就行
pf[1]=&fun2;
pf[2]=&fun3;
pf[0]("aa");
pf[1]("bb");
pf[2]("cc");
return 0;
}