char (*(*x())[])() 是什么意思?

yinguoyi 2002-05-17 12:22:17
char (*(*x())[])() 是什么意思?
是指一个什么函数?
...全文
826 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
eion 2002-08-19
  • 打赏
  • 举报
回复
根据优先级:
char ( * ( * x ( ) ) [ ] ) ( )
-----
x()说明x是个函数,函数的参数为空,函数的返回值为下面:

char ( * ( * x ( ) ) [ ] ) ( )
=------
函数的返回值是个指针, (*x())
char ( * ( * x ( ) ) [ ] ) ( )
------------=====
指向一个数组 (*x())[]

char ( * ( * x ( ) ) [ ] ) ( )
=----------------
数组的元素是指针(*(*x())[])

char ( * ( * x ( ) ) [ ] ) ( )
==== ----------------------===
而指针是指向函数的(*(*x())[])(),显然,函数的参数为空
函数的返回值为char型
windz 2002-08-19
  • 打赏
  • 举报
回复
可读性太差! 改~~~~

我想你一定在做白痴的考试题目吧~ 哎………… :(
sh210 2002-08-19
  • 打赏
  • 举报
回复
指向函数指针的指针数组
写这样代码的人,肯定身心都遭受过严重打击,再打击的人,疯了,疯了,哎……
建议大家都不要这样写
Tommy 2002-08-19
  • 打赏
  • 举报
回复
这种函数在真实环境中应该是可以找得到的,有一定的用途。这里的问题主要是定义得不够清楚,没用typedef定义而已。其实真实环境中的很多类型如果不用typedef定义的话,可能比这难看也不少,不过用了typedef就不太觉得而已
xiaoniaoleyuan 2002-08-19
  • 打赏
  • 举报
回复
太难懂了,用在考试的时候还可以接受,但是在软件设计的时候未免太那个了吧,现在追从就是“简单就好”。。。。。。
tsds 2002-05-21
  • 打赏
  • 举报
回复
清楚了
HostOOP 2002-05-21
  • 打赏
  • 举报
回复
阿牛哥说到点子上了,我以前只是知其然,不知其所以然,现在算是恍然大悟了。可惜我不是楼主,否则100分相赠。
delphihero 2002-05-21
  • 打赏
  • 举报
回复 1
char (*(*x())[])() 返回char 型函数的指针数组的指针的函数。
写这种函数的不是疯子就是白痴
xwu 2002-05-19
  • 打赏
  • 举报
回复
Thinking in C++ 里 作者介绍了一个简单的方法来解读复杂的定义式, 称为right-left guideline. 简单的说就是从中间的变量名开始, 按右-左-右-左...的顺序来读. 以这个题目为例:

char (*(*x())[])()

从x开始:
1.向右看到(), x是一个函数定义, 没有参数;
2.向左看到*, x的返回值是指针;
3.向右看到[], 指针指向数组;
4.向左看到*, 数组的元素也是指针;
5.向右看到(), 指针指向的是函数, 即函数指针, 而且函数没有参数.
6.向左看到char, 函数的返回值是char.

所以, x是一个没有参数的函数, 它的返回值是指向一个数组的指针, 而这个数组的元素是函数指针, 指向的函数没有参数, 且返回char.

welkinsun 2002-05-18
  • 打赏
  • 举报
回复
同意上面的解释,不过这样的代码可读性不高,应该废除。

Agree with upstairs. But it's must be avoided because of be hard to read
zhenshi 2002-05-18
  • 打赏
  • 举报
回复
这种句字一句还好搞定,要在程序里多几句这样的句子可就。。。
prototype 2002-05-18
  • 打赏
  • 举报
回复
其实,char (*(*x())[])()等价为

typedef char (*x_t) ()
x_t[] x()
^^^^^^^^^
what is that? it won't compile...
winmain(温妹)'s analysis is correct.
Januarius_ 2002-05-17
  • 打赏
  • 举报
回复
指向函数指针的指针数组
晨星 2002-05-17
  • 打赏
  • 举报
回复
不,那边也有高手。
yinguoyi 2002-05-17
  • 打赏
  • 举报
回复
总算弄明白了。 C/C++论坛真是人才济济。
隔壁VC论坛差得很, 都只会在IDE上指指点点几下子,
以为熟悉M$VC环境就算理解了C/C++.
dot99 2002-05-17
  • 打赏
  • 举报
回复
每次看到这个的时候就头痛~~~~~~FT
简单点还好,复杂了就要累4人了

不过,写这样的东西好象没有实际的用处

还是用typedef简化一下好得多
HostOOP 2002-05-17
  • 打赏
  • 举报
回复
其实,char (*(*x())[])()等价为

typedef char (*x_t) ()
x_t[] x()

参考Linux/Unix环境下函数signal的原型:
void (*signal(int signum,void(*sighandler)(int)))(int).
它可以等价为:
typedef void (*sig_t)(int);
sig_t signal(int,sigt_t);

这样就清晰了!
winmain 2002-05-17
  • 打赏
  • 举报
回复
1.可编译通过的函数x的实现:
typedef char (*FP)(); //FP为函数指针
typedef FP (*PAFP)[]; //指向FP数组的指针
PAFP p;

char (*(*x())[])()
{
return p;
}

2.x的定义可简化为:
PAFP p;
PAFP x()
{
return p;
}
prototype 2002-05-17
  • 打赏
  • 举报
回复
i think that is a little bit different...

if you meant that the returned value is 'a pointer to an array of ...', then we are agreed.
xwu 2002-05-17
  • 打赏
  • 举报
回复
To prototype(原型):

How about:

>it is a function type, which takes no argument and returns a
>pointer of a type that is an array of pointers to another
^^^^^^^^^^^^^^^^^^^^
>function type that returns 'char' and takes no argument...gee!

my 2 cents.


加载更多回复(3)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧