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值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和PYTHON有个约会

26. 企业级开发基础7:面向对象特征(多态)

多态是让我们的程序在运行的过程中,在不同的状态下进行动态的切换,实现复杂的功能为目的的一种程序开发手段

711
来自专栏来自地球男人的部落格

[LeetCode] 152. Maximum Product Subarray

【原题】 Find the contiguous subarray within an array (containing at least one nu...

2215
来自专栏令仔很忙

新手学JAVA(六)----处理随机性的数据

在我们的日常生活中会遇到很多随机性的事情,比如:摇奖,彩票,掷色子,这些都可以通过程序计算其中奖的概率。在JAVA的类库中,有一个专门操作这种随机性数据的类—-...

1112
来自专栏深度学习计算机视觉

计算A+B

代码很冗余 时间限制:1秒空间限制:32768K热度指数:347 **算法知识视频讲解 题目描述 给定两个整数A和B,其表示形式是:从个位开始,每三位数用...

2907
来自专栏阿凯的Excel

Python读书笔记22(函数传递任意数量实参)

连小编都没想到一个小小的函数要分享这么多期~ 当然,主要原因是! 不好意思,放错图了是! 今天和大家分享函数的最后一个部分,虾米呢? 前期有分享过传递一个...

3747
来自专栏深度学习思考者

Python学习(三) 八大排序算法的实现(上)

   本文Python实现了直接插入排序、基数排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、希尔排序。    上篇来介绍前四种排序方式:  ...

1938
来自专栏老九学堂

Java微课堂-运算符

Java运算符微视频笔记 赋值运算符 这讲的知识点不多,重点是大家要理解运算符的作用,运算符往往是和变量结合使用,用来解决一些常用的逻辑。比如赋值运算符就是给变...

3707
来自专栏desperate633

[编程题] 奇怪的表达式求值代码

常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没...

751
来自专栏Java与Android技术栈

借助Java 8实现柯里化借助Java 8实现柯里化柯里化的好处总结

在函数式编程中,函数的概念跟数学中函数的概念是一样的,类似于“映射”。高阶函数和柯里化是函数式编程的特性。

1442
来自专栏Linux Python 加油站

Python基础之set应用详解

一个{ }里面放一些元素就构成了一个集合,set里面可以是多种数据类型(但不能是列表,集合,字典,可以是元组)

1765

扫码关注云+社区

领取腾讯云代金券