c++复杂声明

void (*funcPtr)();

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

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

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

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

再看第二个例子:

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

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

参考资料

C++编程思想:P109-110

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏idba

了解Python装饰器

一 装饰器是什么 装饰器是一个用于封装函数或者类的代码工具,显式地将封装器作用于函数或者类上,达到程序运行时动态增加功能的目的。对于函数运行前处理常见前置条件...

776
来自专栏行者常至

谈谈 final、finally、finalize 的区别

953
来自专栏十月梦想

对象的属性方法调用的两种方法

492
来自专栏PHP在线

php数组和字符串操作

抽象类 1.抽象类不能实例化 2.抽象方法必须被子类重写的方法 3.如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否包含其他一般方法。 抽象类通常代表一...

3327
来自专栏软件开发 -- 分享 互助 成长

C++静态成员变量和静态成员函数小结

静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成...

1725
来自专栏CaiRui

Python函数的冒泡排序、递归以及装饰器

函数的冒泡排序: 本质是,让元素换位置,逐个比较最终排序。 例1:实现a1,a2值互换: a1 = 123 a2 = 456 temp = a1 a1 = a...

1765
来自专栏Java面试笔试题

阐述final、finally、finalize的区别

893
来自专栏Java 源码分析

Java面向对象基础

     面向对象一直是一种很流行的思想,他的精髓也就在于他的三大特性:封装,继承和多态。本文就在这三个方面简单的谈一谈Java的面向对象基础。 1.封装:  ...

3225
来自专栏java一日一条

深入理解Java中的final关键字

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你...

542
来自专栏海天一树

小朋友学C++(12):多态

(一) 先编写函数: #include <iostream> using namespace std; class Shape { protected:...

2976

扫码关注云+社区