返回信息流先得明白几个概念
char *
char **
char (* )[]
char *(* )[]
Thinking in C++ 里 作者介绍了一个简单的方法来解读复杂的定义式, 称为right-left guideline. 简单的说就是从中间的变量名开始, 按右-左-右-左...的顺序来读. 以这个题目为例:
char (*(*x())[])()
从x开始:
1.向右看到(), x是一个函数定义, 没有参数;
2.向左看到*, x的返回值是指针;
3.向右看到[], 指针指向数组;
4.向左看到*, 数组的元素也是指针;
5.向右看到(), 指针指向的是函数, 即函数指针, 而且函数没有参数.
6.向左看到char, 函数的返回值是char.
所以, x是一个没有参数的函数, 它的返回值是指向一个数组的指针, 而这个数组的元素是函数指针, 指向的函数没有参数, 且返回char.
++++++++++++++++++++++++++++++++++++++++++++++++++++
根据优先级:
char ( * ( * x ( ) ) [ ] ) ( )
-----
x()说明x是个函数,函数的参数为空,函数的返回值为下面:
char ( * ( * x ( ) ) [ ] ) ( )
=------
函数的返回值是个指针, (*x())
char ( * ( * x ( ) ) [ ] ) ( )
------------=====
指向一个数组 (*x())[]
char ( * ( * x ( ) ) [ ] ) ( )
=----------------
数组的元素是指针(*(*x())[])
char ( * ( * x ( ) ) [ ] ) ( )
==== ----------------------===
而指针是指向函数的(*(*x())[])(),显然,函数的参数为空
函数的返回值为char型
这是一条镜像帖。来源:北邮人论坛 / soft-design / #88同步于 1 周前
SoftDesign机器人发帖
[推荐] 解读char (*(*x())[])()
buptds
1 周前镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。