c++复杂声明

void (*funcPtr)();

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

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

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

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

再看第二个例子:

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

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

参考资料

C++编程思想:P109-110

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的君君的前端之路

正则表达式

1485
来自专栏十月梦想

变量作用域

********************************************************************************...

632
来自专栏GreenLeaves

Js正则Replace方法

JS正则的创建有两种方式: new RegExp() 和 直接字面量。 //使用RegExp对象创建 var regObj = new RegExp("(^\s...

20010
来自专栏GreenLeaves

Javascript之in操作符的用法

in操作符是js里面常用的一个操作符,下面是其几个常用的功能: 1、配合for语句循环遍历/迭代数组中的元素 2、配合for语句循环遍历/迭代集合中的属性 3、...

1825
来自专栏null的专栏

python基础知识——控制语句

控制语句主要有条件语句和循环语句。 一、条件语句 1、if语句 格式 if 表达式: 语句1 else: 语句2 如下面的例子: ...

2926
来自专栏十月梦想

变量和常亮

在函数内,变量的使用需要声明常量的作用域globay变量名(全局作用)local(局部)static(静态)

582
来自专栏流柯技术学院

正则中需要转义的特殊字符

772
来自专栏Golang语言社区

厚土Go学习笔记 | 05. 函数

函数可以没有参数,也可以有多个参数。 package main import( "fmt" ) //有两个参数的函数 func add(x,y in...

35810
来自专栏Nian糕的私人厨房

ECMAScript6 解构赋值

在 ES6 中,关于解构的含义为:允许按照一定模式,从数组和对象中提取值,对变量进行赋值,而数组、对象和字符串,都能通过这种方式进行赋值

634
来自专栏代码世界

Python之函数进阶

一、命名空间 命名空间一共分为三种:   全局命名空间   局部命名空间   内置命名空间 全局命名空间:代码在运行伊始,创建的存储“变量名与值的关系”的空间 ...

3146

扫码关注云+社区