函数指针:顾名思义就是函数的指针,由函数修饰,说明这是一个指向函数的指针。
函数指针的应用:可以通过函数指针变量方便的调用功能不同的函数。
上代码:
代码一:
1 #include <iostream> 2 using namespace std; 3 4 void Func1(int); 5 void Func2(int); 6 void Func3(int); 7 typedef void (*FuncType)(int);//定义函数指针类型
8 void CallFunc(FuncType fc, int); 9 10 11 int main(void) 12 { 13 CallFunc(Func1,10); 14 CallFunc(Func2,20); 15 CallFunc(Func3,30); 16 cout<<endl<<endl; 17 } 18 19 void Func1(int x) 20 { 21 cout<<"func1: "<<x<<endl; 22 } 23 24 void Func2(int x) 25 { 26 cout<<"func2: "<<x<<endl; 27 } 28 29 void Func3(int x) 30 { 31 cout<<"func3: "<<x<<endl; 32 } 33 34 void CallFunc(FuncType fc, int x) 35 { 36 fc(x); 37 }
代码二:
定义函数指针变量(全区变量VS局部变量)
1 void MyFun(int ); 2 typedef void (*FuncType)(int);//函数指针类型 3 FuncType FunP;//函数指针全局变量 4 5 int main(void) 6 { 7 FuncType FunP; 8 MyFun(10); 9 FunP=&MyFun;//也可以改为FunP=MyFun; 10 (*FunP)(10);//可以改为FunP(10); 11 cout<<endl<<endl; 12 return 0; 13 } 14 15 void MyFun(int x) 16 { 17 cout<<x<<endl; 18 }
=============================================================
其实函数名本身也是一个指针类型,只不过是一个指针常量。根据代码二总结如下:
1)其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。 MyFun 函数名是一个函数指针常量,而 FunP 是一个函数数指针变量,这是它们的关系。
2)但函数名调用如果都得如(*MyFun)(10)这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10)这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3)为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。
4)赋值时,即可FunP = &MyFun形式,也可FunP = MyFun。
-----------------------------------------------------------------------------------------------------------------
指针函数:由指针修饰,说明这是一个返回指针的函数.比较容易理解。