如何解读返回函数指针的函数声明
来源:互联网 发布:淘宝网店注册步骤 编辑:程序博客网 时间:2024/06/14 17:56
逐步解读如下代码:
int (*(*pf())())(){ return nullptr;}
首先,要确定声明中出现的操作符的优先级
显然,函数调用操作符()的优先级是高于指针解引用操作符*的,另外,小括号总是具有最高优先级
其次,要确定在声明中标识符与某个操作符结合起来的时候有什么意义
例如:
a() //a是一个函数*a //a是一个指针
由于函数声明的特殊性,当指针解引用操作符*与一个表示函数的标识符结合时,表示这个函数的返回值是一个指针
例如 *a() 表示a是一个返回值为指针的函数
有了以上的基础,接下来我们就可以从声明中的标识符开始,按照操作符的优先级,由内向外逐步来解读:
/* pf() pf是一个无参数函数 *pf() 返回值是一个指针 (*pf())() 返回值是一个无参数函数的指针 *(*pf())() 返回值是一个无参数函数的指针,这个函数的返回值又是一个指针 (*(*pf())())()返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数函数的指针int(*(*pf())())()返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数且返回值为int的函数的指针*/
可以看出,这实际上是返回值为函数指针的函数的递归声明下面是可读性更强的等效代码:
typedef int (*pa)(); typedef pa (*pb)(); pb pfex(){ return nullptr; }
测试代码:
#include <stdio.h>#include <conio.h>int a(){ return 88;}int (*b())(){ return a;}int (*(*pf())())(){ return b;}typedef int (*pa)();typedef pa (*pb)();pb pfex(){ return b;}int main(){ int r = pf()()();printf("%d\n",r); r = pfex()()();printf("%d\n",r);getch();return 0;}
0 0
- 如何解读返回函数指针的函数声明
- 如何解读返回函数指针的函数声明
- [C/C++]如何解读返回函数指针的函数声明
- [C/C++]如何解读返回函数指针的函数声明
- 巧解如何声明函数指针以及函数返回值是函数指针的函数指针
- 返回值为指针的函数解读
- 声明返回数组指针的函数
- 如何定义返回函数指针的函数
- C:返回值为指针的函数解读
- 函数返回数组指针的几种声明方式
- 如何解决C/C++返函数指针的函数声明
- 解读C的声明,解析各种函数、指针组合的声明
- 返回类型是函数指针的函数指针 类比复杂的数组声明
- 返回指针的函数
- 返回指针的函数
- 返回函数的指针
- 返回指针的函数
- 返回指针的函数
- IOS 输入校验
- Maven使用第三方jar文件的两种方法
- maven jetty plugin
- Python 实现简单的单向链表
- 利用sprintf实现strncpy
- 如何解读返回函数指针的函数声明
- 数据库部分故障处理过程思路
- Problem (2) in the Chunked-Encoded data解决
- Oracle11g一些重要的初始化参数
- afinal框架网络
- 【BZOJ1342】【Baltic2007】Sound静音问题 单调队列
- 常见软件版本
- 金网seo工具资源全套软件
- 开发中使用的键盘类型