c++复杂声明

void (*funcPtr)();

上面声明了一个指向函数的指针,当碰到这样一个比较复杂的声明时,最好的方法是从 中间开始和向外扩展

  • 从中间开始:即 从变量名开始
  • 像外扩展:即 先注意右边最近的项,已右括号结束,再注意左边的项,已左括号结束,再注意右边的项。。。

用上述方法来解析一下第一个声明:

  • 往右看:是右括号,结束
  • 往左看:funcPtr是个指针
  • 往左看:碰到左括号,结束
  • 往右看:指针指向一个函数,即:指向函数的指针
  • 向左看:函数的返回值类型是 void,即:指向返回值为 void 的函数

再看第二个例子:

void * (*(*fp1)(int))[10];
  • 往右看:是右括号,结束
  • 往左看:fp1 是个指针
  • 往左看:是左括号,结束
  • 往右看:fp1 指向一个 参数为 int 的函数(因为函数是 () 指示的,碰到了 ) 下一步就往左看)
  • 往左看:函数返回一个指针
  • 往左看:是左括号,结束
  • 往右看:指针指向一个 数组
  • 往左看:数组类型为 void *

即:fp1是一个函数指针,指向的函数 接收 int 为参数,返回一个指针,这个指针指向一个 10 个元素的数组,数组类型为 void *

参考资料

C++编程思想:P109-110

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏积累沉淀

Python快速学习第一天

第一天: Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言 一、运行Python: 1、 在交互式环境下,直接输入Python进入Pyth...

1945
来自专栏lgp20151222

Java函数的传参机制

最近的一个项目,里面各种返回void,参数用引用类型,那叫一个熟和多,但是也把我绕糊涂了。

1512
来自专栏desperate633

深入理解javascript中的继承机制(4)多继承寄生式继承借用构造函数借用构造函数并且复制原型以上

我们知道多继承是面向对象的语言中比较纠结的一个问题,有好处也存在缺陷。这方面我们不多讨论。就javascript而言,要实现多继承是比较简单的,因为javasc...

761
来自专栏土豆专栏

Java面试之关键字

finalize()是Object的protected方法,子类可以覆盖该方法来实现资源清理工作,GC在回收对象之前调用该方法。

20110
来自专栏DannyHoo的专栏

为什么NSString要用Copy来修饰?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1032
来自专栏Vamei实验室

Java进阶01 String类

之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础。在Java进阶中,我将对Java基础进行补充,并转向应用层面。 大部分编程语言都能够处...

1848
来自专栏土豆专栏

Java面试之数据类型(一)

封装类是引用类型,基本类型在传递参数的时候都是按值传递,而封装类型是按引用传递的(其实引用也是按值传递的,但是传递的是对象的地址)

1432
来自专栏闵开慧

php中this与::概念

$this 的含义是表示    实例化后的 具体对象! 我们一般是先声明一个类,然后用这个类去实例化对象! 但是,当我们在声明这个类的时候,想在类本身...

2917
来自专栏我是业余自学C/C++的

一维变长数组

1314
来自专栏calmound

Javascript数组

定义    定义空数组       var arr = new Array();       var arr = [];    定义一个包含1,2,3的数组  ...

3396

扫码关注云+社区