迷惑的C语句

[复制链接]
2964|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 *指针,该函数是两级的函数指针。

yewuyi 发表于 2008-6-21 10:23 | 显示全部楼层

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

 楼主| eagle758 发表于 2008-6-21 10:44 | 显示全部楼层

农民讲习所

农民讲习所:
    你好,多谢指教!
  这个是不是相当于定义了一个返回指向INT类型的函数指针数组???
 楼主| eagle758 发表于 2008-6-21 10:46 | 显示全部楼层

误解

农民讲习所:
    你好,多谢指教!
  这个是不是相当于定义了一个返回指向INT类型的指向函数指针数组的指针???
_21icbbs 发表于 2008-6-21 10:48 | 显示全部楼层

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

好象没见过有什么地方用这个啊?
农民讲习所 发表于 2008-6-21 11:25 | 显示全部楼层

不知道,难猜

 楼主| eagle758 发表于 2008-6-21 11:29 | 显示全部楼层

所长

 所长:
   对于你的理解还没有领悟到,所长是否可以配合一个例子说说!!!!
 楼主| eagle758 发表于 2008-6-21 13:42 | 显示全部楼层

re

所长
simon21ic 发表于 2008-6-21 15:58 | 显示全部楼层

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

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

可以去学饶舌了
dld2 发表于 2008-6-21 16:17 | 显示全部楼层
msblast 发表于 2008-6-21 16:22 | 显示全部楼层

我来摆摆,太绕口了

一个具有5个元素的数组arr[5]
数组的元素是指针*arr
数组元素指针指向了一个函数(*arr)(),说明数组元素是函数指针arr
函数指针arr指向的函数不带入口参数(*arr)(),并且返回一个指针*(*arr)()
这个返回的指针*(*arr)()指向一个函数(*(*arr)())(),该函数没有入口参数,并且返回一个指针*(*(*arr)())()
这个返回的指针*(*(*arr)())()类型是int型int *(*(*arr)())()
simon21ic 发表于 2008-6-21 16:32 | 显示全部楼层

LS是分解动作,哈哈

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

猜想的应用:系统处理数据的方法有几种,需要更具不同的状态(优先级1),选择不同的优先级算法,来调用函数处理数据
平常人 发表于 2008-6-21 17:22 | 显示全部楼层

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

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

typedef int *INTP;
typedef INTP (*FUNCP)();
typedef FUNCP (*FUNCPP)();
FUNCPP  arr[5];
原野之狼 发表于 2008-6-21 17:39 | 显示全部楼层

来一段测试代码~

grady1125 发表于 2008-6-21 23:07 | 显示全部楼层

搞这么深奥

干什么捏?
blitzero 发表于 2008-6-23 10:07 | 显示全部楼层

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

那么多层...
李冬发 发表于 2008-6-23 13:33 | 显示全部楼层

潭浩强的弟子!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部