为了账号安全,请及时绑定邮箱和手机立即绑定

C++指针类型识别正确姿势

标签:
C C++

指针是C和C++中编程最复杂也是最有技巧的部分,但对于新手来说,指针无疑是最致命的,让很多人望而退步。不过很多事情都是从陌生开始,然后渐渐熟悉起来的,就像交朋友一样,得花点时间去培养感情才行。不过指针这位朋友可比较高冷,只花一点点时间恐怕不够,得多学多练多接触,它才会给你展示它热情的一面。

好了,废话不多说,相信很多人在识别指针类型的时候,经常会出错,像void p;这样的指针自然好认,但是像int (fp[])(int);或者float ((*fp2)(int,int,float))(int);这样的指针可能就没那么好认了。其实不用怕,都是有规(套)则(路)的。

一般的解决办法是从中间开始向外扩展,从中间开始即从变量名开始,拿float ((fp2)(int,int,float))(int);举例子,就是从fp2开始,向外扩展的意思是先看右边最近项,fp2的右边是右括号,没有意义,然后注意左边,星号表示fp2是一个指针,再看右边,是一个参数表,说明fp是一个指向函数的指针,且这个函数有三个参数,分别是int、int、float类型,再看左边,星号表示该函数返回值为指针,再看右边,右括号,没有意义,看左边,左括号,无意义,看右边,参数列表,表明返回的指针是指向函数的指针,且函数有一个int型参数,最后float表示函数返回值为float型,所以总结一下便是,fp2是一个指向函数的指针,该函数接受三个参数(int,int,float),并且返回一个指向函数的指针,该函数接受一个整形参数并返回一个float值。

看起来很复杂,解读起来也很麻烦,看到以后想打作者的心都有了,但没办法,当需要用到的时候还是得硬着头皮上。

最后做两个小练习:

  void ((*fp1)(int))[10];

  double (((*fp2)())[10])();

 解答:

  fp1是一个指向函数的指针,该函数接受一个整形参数并且返回一个指向10个void指针数组的指针

  fp2是一个指向函数的指针,该函数无参数,且返回一个指向含有10个指向函数指针数组的指针,这些函数不接受参数且返回double值。

真正重要的东西,用眼睛是看不见的。

点击查看更多内容
4人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.8万
获赞与收藏
2562

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消