打印

迷惑的C语句

[复制链接]
1976|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eagle758|  楼主 | 2008-6-21 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int *( *( *arr[5])())();
这个语句怎样理解.
*( *arr[5])()) 这个可以理解为不带参数返回指针的函数数组.
但是剩下的前面int *和后面()怎样理解.

是不是声明了一个不带参数函数数组返回指向函数的指针????/

相关帖子

沙发
农民讲习所| | 2008-6-21 09:53 | 只看该作者

用替换法看指针:

  比如一个函数:int xxx( int );
  xxx用指针(函数指针)p000代替,成为:int (*p000)( int );
  *p000 和 xxx地位相同。然后加括号表示一个整体。
 
   xxx用指针(函数指针)p000数组代替,成为:int (*p000[5])( int );

其它依次类推。
  

使用特权

评论回复
板凳
HWM| | 2008-6-21 09:55 | 只看该作者

呵呵,练眼神

使用特权

评论回复
地板
农民讲习所| | 2008-6-21 10:09 | 只看该作者

反过来替换:

int *( *( *arr[5])())();

1)用函数名xxx代替( *arr[5])(),成为:
   int *( *xxx)();
   因为是连在一起,所以代替时+()
2)用函数名yyy代替( *xxx),成为:
   int * yyy();

就是说,一个函数,返回int *指针,该函数是两级的函数指针。

使用特权

评论回复
5
yewuyi| | 2008-6-21 10:23 | 只看该作者

哈哈,这兄弟肯定是看FSC的FLSAH模拟EE出问题了……

使用特权

评论回复
6
eagle758|  楼主 | 2008-6-21 10:44 | 只看该作者

农民讲习所

农民讲习所:
    你好,多谢指教!
  这个是不是相当于定义了一个返回指向INT类型的函数指针数组???

使用特权

评论回复
7
eagle758|  楼主 | 2008-6-21 10:46 | 只看该作者

误解

农民讲习所:
    你好,多谢指教!
  这个是不是相当于定义了一个返回指向INT类型的指向函数指针数组的指针???

使用特权

评论回复
8
_21icbbs| | 2008-6-21 10:48 | 只看该作者

所长,这么定义有什么具体用处吗?

好象没见过有什么地方用这个啊?

使用特权

评论回复
9
农民讲习所| | 2008-6-21 11:25 | 只看该作者

不知道,难猜

使用特权

评论回复
10
eagle758|  楼主 | 2008-6-21 11:29 | 只看该作者

所长

 所长:
   对于你的理解还没有领悟到,所长是否可以配合一个例子说说!!!!

使用特权

评论回复
11
eagle758|  楼主 | 2008-6-21 13:42 | 只看该作者

re

所长

使用特权

评论回复
12
simon21ic| | 2008-6-21 15:58 | 只看该作者

int *( *( *arr[5])())();

定义的是一个长度为5的函数数组,每个元素对应的函数返回的是函数指针,参数是void,返回的函数指针指向的函数返回int*,参数是void

可以去学饶舌了

使用特权

评论回复
13
dld2| | 2008-6-21 16:17 | 只看该作者

嘻嘻

使用特权

评论回复
14
msblast| | 2008-6-21 16:22 | 只看该作者

我来摆摆,太绕口了

一个具有5个元素的数组arr[5]
数组的元素是指针*arr
数组元素指针指向了一个函数(*arr)(),说明数组元素是函数指针arr
函数指针arr指向的函数不带入口参数(*arr)(),并且返回一个指针*(*arr)()
这个返回的指针*(*arr)()指向一个函数(*(*arr)())(),该函数没有入口参数,并且返回一个指针*(*(*arr)())()
这个返回的指针*(*(*arr)())()类型是int型int *(*(*arr)())()

使用特权

评论回复
15
simon21ic| | 2008-6-21 16:32 | 只看该作者

LS是分解动作,哈哈

想到一个应用:
函数的2级优先级调用,根据优先级1,通过函数数组找到一个函数指针,通过调用这个指针指向的函数(需要增加参数:优先级2),得到具体的函数。适用:优先级1固定为0-4,优先级2是动态分配的,可能不同的优先级1对应的优先级2的排列算法或者数据结构不同,所以需要不同的函数处理。

猜想的应用:系统处理数据的方法有几种,需要更具不同的状态(优先级1),选择不同的优先级算法,来调用函数处理数据

使用特权

评论回复
16
平常人| | 2008-6-21 17:22 | 只看该作者

哎。。。。 总是有人玩这种唬人的东西,搞简单点不好吗!

这样子写不是清楚多了!  饶舌也好,分解动作也好,一目了然!

typedef int *INTP;
typedef INTP (*FUNCP)();
typedef FUNCP (*FUNCPP)();
FUNCPP  arr[5];

使用特权

评论回复
17
原野之狼| | 2008-6-21 17:39 | 只看该作者

来一段测试代码~

使用特权

评论回复
18
grady1125| | 2008-6-21 23:07 | 只看该作者

搞这么深奥

干什么捏?

使用特权

评论回复
19
blitzero| | 2008-6-23 10:07 | 只看该作者

我这种菜鸟,看着就晕了...

那么多层...

使用特权

评论回复
20
李冬发| | 2008-6-23 13:33 | 只看该作者

潭浩强的弟子!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

119

帖子

0

粉丝