函数指针

重点:

1.函数指针指向的是函数而非对象,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。

2.要想声明一个可以指向该函数的指针,只需要用指针替换函数名即可。

NOTE:*pf两端的括号必不可少。如果不写这对括号,则pf是一个返回值为bool指针的函数

  //声明一个名为pf的函数,该函数返回bool*;

  Bool *pf ( const string & , const string & );

3.当我们把函数名作为一个值使用时,该函数自动地转换成指针。

 lengthCompare的地址赋给pf:

 Pf = lengthCompare ; // pf指向名为lengthCompare的函数

 Pf = &lengthCompare ;//等价的赋值语句:取地址符是可选的

 

此外,我们还能直接使用指向函数的指针调用该函数,无须提前解引用指针:

Bool b1= pf(“hello”,“goodbye”);//调用lengthCompare函数

Bool b2 = (*pf) (“hello”,“goodbye”) ;//一个等价的调用

Bool b3 = lengthCompare (“hello”,“goodbye”);//另一个等价的调用

 

4.在指向不同函数类型的指针间不存在转换规则。

5.如果定义了指向重载函数的指针,编译器通过指针类型决定选用哪个函数,指针类型必须与重载函数中的某一个精确匹配。

6.和数组类似,虽然不能定义函数类型的形参,但是形参可以是指向函数的指针。

(我们可以直接把函数作为实参使用,此时它会自动转换成指针)

7.和数组类似,虽然不能返回一个函数,但是能返回指向函数类型的指针。

 (我们必须显式地把返回类型写成指针形式,编译器不会自动地将函数返回类型当成对应的指针类型处理)

8.要想声明一个返回函数指针的函数,最简单的办法是使用类型别名:

 Using F = int ( int* , int );//F是函数类型,不是指针

 Using PF = int (*) ( int* , int );//PF是指针类型

和函数形参不一样,返回类型不会自动地转换成指针,必须显示地将返回类型定义为指针:

PF f1 ( int );  //正确:PF是指向函数的指针,f1返回指向函数的指针

F f1 ( int );   //错误:F是函数类型,f1不能返回一个函数

F *f1 ( int );  //正确:显式地指定返回类型是指向函数的指针

9.直接声明f1:

  Int ( * f1 ( int ) ) ( int* , int );

 尾置返回类型:

  Auto f1 ( int ) -> int (*) ( int* , int );

10.decltype ( sumLength ) *getFc (const string & );

  牢记当我们将decltype作用于某个函数时,它返回函数类型而非指针类型,因此,我们显示地加上*以表示我们需要返回指针,而非函数本身。

 

转载于:https://www.cnblogs.com/YH-shjd-senvn/p/5789833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值