C++学习基础十七-- 函数指针

C++常用的函数指针

语法:返回值类型 (*函数名)(参数列表);


举例说明:int (*Func)(int m, int n);

  • 用typedef简化函数指针的定义

        例如:

1 typedef int (*Func)(int m, int n);
  • 函数指针的初始化和赋值
 1 // 1. 先声明对应函数指针类型的函数  
 2 int max(int num1, int num2)
 3 {
 4    return num1 > num2 ? num1 : num2;
 5 }
 6 
 7 //2. 初始化
 8 Func fc = 0;//表示函数指针不指向任何函数
 9 Func fp = max;//表示函数指针指向max函数
10 
11 //3. 调用
12 max(10,20);//直接调用
13 fp(10,20);//使用函数指针调用
  • 指针函数可以作为形参

         有两种方式:

1 //1.
2 void useBigger(const string &str1, const string &str2,
3                 bool (const string &s1, const string &s2));
4 //或者
5 void useBigger(const string &str1, const string &str2,
6                 bool (*)(const string &s1, const string &s2));
  • 返回指向函数的指针

        例如:

1 int (*ff(int)) (int *p1, int n);

 

这句话的意思是:ff(int)是一个函数,带有一个int型形参,返回值类型为int (*) (int *p1, int n),也就是返回一个函数指针。使用typedef可使该定义更简明易懂:

1  typedef int (*PP)(int *p1, int n); 
2  PP ff(int);

 

  • C++允许函数指针指向重载的函数

        例如:

1 extern void ff(vector<double> vds);
2 extern void ff(unsigned int n);
3 
4 typedef void (*PF1)(unsigned int n);
5 
6 PF1 p = ff;//ff(unsigned int)

指针的类型必须与重载函数的其中一个版本精确匹配,否则导致编译出错。

posted @ 2017-08-31 11:29  bky2016  阅读(445)  评论(0编辑  收藏  举报