C/C++函数指针

       声明指向某种数据类型的指针时,必须指定指针指向的类型。同样,声明指向函数的指针时,也必须指定指针指向的函数类型。这意味着声明应指定函数的返回类型以及函数的特征标(参数列表)。也就是说,声明应像函数原型那样指出有关函数的信息。例如,假设编写了一个估算时间的函数,其原型如下:

a417c047a2cf4d00b185e3d04d05ca9f.png
则正确的指针类型声明如下:

282999a909a74a1695886a664d8898aa.png
       这与pam( )声明类似,只是将pam替换为(*pf)。由于pam是函数,因此(*pf)也是函数。而如果(*pf)是函数,则pf就是函数指针。
       通常,要声明指向特定类型的函数的指针,可以首先编写这种函数的原型,然后用(*pf)替换函数名。这样pf就是这类函数的指针。
       为提供正确的运算符优先级,必须在声明中使用括号将*pf括起。括号的优先级比*运算符高,因此*pf(int)意味着pf( )是一个返回指针的函数,而(*pf)(int)意味着pf是一个指向函数的指针:

4b6ad03b716e41e885e4f6e512b8e8d3.png
       正确地声明pf后,便可以将相应函数的地址赋给它:

ba9f1d31a113491583551232e7214df8.png
       注意,pam( )的特征标和返回类型必须与pf相同。如果不相同,编译器将拒绝这种赋值:

9222ba0b8c2c4b27adaf8869c30ea675.png
       假设要将将要编写的代码行数和估算算法(如pam( )函数)的地址传递给它,则其原型将如下:8e1eea25e87c45f8b793c614d9eb5749.png
       上述声明指出,第二个参数是一个函数指针,它指向的函数接受一个int参数,并返回一个double值。要让estimate( )使用pam( )函数,需要将pam( )的地址传递给它:

6f8530e0741347c8b957c1b646a39f5e.png
       显然,使用函数指针时,比较棘手的是编写原型,而传递地址则非常简单。

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小枭码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值