函数指针详解

选自《C++ Primer Plus(第六版)》

  与数据项类似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。

  1.函数指针的基础知识

  首先通过一个例子来阐述这一过程。假设要设计一个名为estimate()的函数,估算编写指定行数的代码所需的时间,并且希望不同的程序员都将使用该函数。对于所有的用户来说,estimate()中一部分代码都是相同的,但该函数允许每个程序员提供自己的算法来估算时间。为了实现这种目标,采用的机制是,将程序员要使用的算法函数的地址传递给estimate()。为此,必须能够完成下面的工作:

  • 获取一个函数的地址;
  • 声明一个函数指针;
  • 使用函数指针来调用函数

  1.获取函数的地址
  获取函数的地址很简单:只要使用函数名(后面不跟参数)即可。注意传递的是函数地址还是函数的返回值,假如think()是一个函数,那么有:

process(think);  //passes address of think() to process
thought(think()); //passes return value of think() to thought

  2.声明函数的指针
  声明函数指针时,必须要指定函数的返回类型以及函数的特征标(参数列表)。例如:
  double pam(int); //prototype
  则正确的指针类型声明如下:

double (*pf)(int); //pf points to function that takes one int 
                    //argument and that returns type double
pf=pam;   //pf now points to the pam() function

  这时pf就是函数指针,(*pf)就是函数。注意pam()的特征标和返回类型必须与pf相同。
  ps:区分函数指针和返回指针的函数:
  因为括号的优先级比*运算符高,因此*pf(in

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值