函数指针:
(函数指针就是指向函数的一个指针,它是一个指针,指向一个函数)
type (*prr1)(type1,type2); //函数指针的形式
(type为函数返回值的类型,type1,type2为函数形参的类型)
1:函数指针的调用:
方法: &+函数名 或 直接函数名
2: 函数指针的数组
例如:char* (*pf[3])(int a,int b);
(pf是一个数组,它能存储3个返回值为char *类型,且两个形参都为int类型的函数指针)
函数指针数组的调用:
#include <stdio.h>
#include <string.h>
char * fun1(char * p)
{
printf("%s\n", p);
return p;
}
char * fun2(char * p)
{
printf("%s\n", p);
return p;
}
char * fun3(char * p)
{
printf("%s\n", p);
return p;
}
int main()
{
char * (*pf[3])(char * p);
pf[0] = fun1; //可以直接用函数名
pf[1] = &fun2; //可以用函数名加上取地址符
pf[2] = &fun3;
pf[0]("fun1");
pf[1]("fun2");
pf[2]("fun3");
return 0;
}
3:函数指针数组的指针:
char * (*(*pf)[3])(char * p);
理解: char* (*)(char *p) ((*pf)[3]))
(pf是一个指针,它指向含有3个元素的数组,数组中元素的类型为函数指针类型,函数的形参为char*,返回值为char* 类型)
//#include <stdio.h>
//#include <string.h>
//
//char * fun1(char * p)
//{
// printf("%s\n", p);
// return p;
//}
//
//char * fun2(char * p)
//{
// printf("%s\n", p);
// return p;
//}
//
//char * fun3(char * p)
//{
// printf("%s\n", p);
// return p;
//}
//
//int main()
//{
// char * (*a[3])(char * p); //函数指针数组
// char * (*(*pf)[3])(char * p); //函数指针数组的指针
// pf = &a; //将整个函数指针数组的地址传给函数指针数组的指针
// a[0] = fun1;
// a[1] = &fun2; //将函数地址存储在函数指针数组当中
// a[2] = &fun3;
// pf[0][0]("fun1"); //*(*(pf+0)+0)
// pf[0][1]("fun2");
// pf[0][2]("fun3");
// return 0;
//}