一直觉得函数指针是个很难的东西,其实函数指针和一般的指针一样,挺简单的。
一,函数指针的定义
函数指针,顾名思义就是指向函数的指针,就是指向函数存储区域起始地址的指针。先看一下它是如何声明的:
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;<span style="white-space:pre"> </span>//也可以直接用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;<span style="white-space:pre"> </span>//依次赋值就行 pf[1]=&fun2; pf[2]=&fun3; pf[0]("aa"); pf[1]("bb"); pf[2]("cc"); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012000209/article/details/47831601