码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-12-15 00:22:36      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:复杂   变量   返回值   列表   接受   函数   正确姿势   int   技巧   

  指针是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值。

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

标签:复杂   变量   返回值   列表   接受   函数   正确姿势   int   技巧   

原文地址:http://www.cnblogs.com/mfrank/p/6181482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!