指向函数的指针函数指针/指针函数返回指针的函数

函数指针:顾名思义就是函数的指针,由函数修饰,说明这是一个指向函数的指针。

函数指针的应用:可以通过函数指针变量方便的调用功能不同的函数。

上代码:

代码一:

 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

-----------------------------------------------------------------------------------------------------------------

指针函数:由指针修饰,说明这是一个返回指针的函数.比较容易理解。

原文地址:https://www.cnblogs.com/sjlove/p/3060908.html