zoukankan      html  css  js  c++  java
  • 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值。

  • 相关阅读:
    HDU1548:A strange lift
    hdu1978_How many ways dfs+记忆化搜索
    HDU1518:Square(DFS)
    HDU ACM 1495 非常可乐(广搜BFS)
    HDU1372:Knight Moves(BFS)
    662_二叉树最大宽度
    590_N叉树的后序遍历
    一直在坚持
    动态链接库DLL的操作顺序
    最近木马的查杀方法/各类杀毒软件的使用
  • 原文地址:https://www.cnblogs.com/mfrank/p/6181482.html
Copyright © 2011-2022 走看看