稍微麻烦一点的指针

函数指针:
(函数指针就是指向函数的一个指针,它是一个指针,指向一个函数)
  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;
//}


你可能感兴趣的:(稍微麻烦一点的指针)