char (*(*x[3])())[5] 谁能给个类似这个的声明的示例的使用

once_and_again 2010-09-14 09:17:49
char **argv
argv: pointer to pointer to char



int (*daytab)[13]
daytab: pointer to array[13] of int

int *daytab[13]
daytab: array[13] of pointer to int

void *comp()
comp: function returning pointer to void

void (*comp)()
comp: pointer to function returning void





char (*(*x())[])()
x: function returning pointer to array[] of pointers to function returning char

从最 里面开始 x---->右结合----->x()是个函数
*x()------>函数的返回值是 指针
*x()[]----->继续右结合,函数的返回值是指针,返回的这个指针指向数组
*(*x())[]------->这个数组内,里面存储的是个指针,
(*(*x())[])()-------->数组 里的这个指针呢,指向一个函数
char(*(*x())[])() --------->这个函数的返回值 是char型的

char (*(*x[3])())[5]
x: array[3] of pointers to functions returning pointer to array[5] of char

x ------->开始
x[3]------>数组
*x[3]-----》数组里面存储的是指针
(*x[3])------》
(*x[3])()----》数组里面的存储的指针 指向函数
*(*x[3])()-----》函数的返回值是指针
*(*x[3])()-------》
(*(*x[3])())[5]----》函数的返回 的指针指向有5个元素的数组数组
char(*(*x[3])())[5]---》数组中的每个元素是char型的


不知道分析的对不对?
谁能给个例子,比如c++ 中的虚函数用那个方法?

或者 这样的例子到底 实用不实用。

...全文
242 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
csucdl 2010-09-14
  • 打赏
  • 举报
回复
等价变换如下:
char (*(*x())[])()
typedef char(*PFunction)();
typedef PFunction(*PArray)[];
PArray x();
dingshaofengbinbin 2010-09-14
  • 打赏
  • 举报
回复
LZ想用函数指针操作虚函数表中的虚函数是吧!!

class A;
A aa;
int **a=&aa;
这个二维数组a里面的都是虚函数的首地址。。。。
第一个虚函数表:
a[0][0]
a[0][1]
....
第二个虚函数表:
a[1][0]
a[1][1]
....
....
ccltiancai 2010-09-14
  • 打赏
  • 举报
回复
这跟模板元没啥关系把。。
只不过猛一看像函数式
robertbo 2010-09-14
  • 打赏
  • 举报
回复
这样复杂的表达式在实际工程中会有应用吗,会在哪些情况下用到?
liufang421 2010-09-14
  • 打赏
  • 举报
回复
这样太复杂的嵌套多用几次typedef应该要清晰点
dingshaofengbinbin 2010-09-14
  • 打赏
  • 举报
回复
(*(*x[3])())[5]----》函数的返回 的指针指向有5个元素的数组数组
char(*(*x[3])())[5]---》数组中的每个元素是char型的
上面的解释错了!!
char(*(*x[3])())[5]---》函数的返回值是数组指针(char*)[5]
看下面的例子:

#include<iostream>
using namespace std;
typedef char (*s)[1];
s fun()
{
cout<<"fun"<<endl;
return 0;
}
s fun1()
{
cout<<"fun1"<<endl;
return 0;
}
int main()
{
char (*(*x[2])())[1];
char *(*s[2])();
x[0]=fun;
x[1]=fun1;
x[0]();
x[1]();
return 0;
}

结果:
fun
fun1
某某9 2010-09-14
  • 打赏
  • 举报
回复
实用不实用 ?
蔡袅 2010-09-14
  • 打赏
  • 举报
回复
才学5天C++ 不过还能明白
once_and_again 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hastings 的回复:]

~~好凌乱~~好复杂~~这些应该是模板元编程中用到比较多~~坐等LX回答~~
[/Quote]

是啊,打算看 元 编程呢,估计很是眩晕。


昵称很不好取 2010-09-14
  • 打赏
  • 举报
回复
好复杂,顶一下,网上好像有所谓的左右法则来分析这类问题
白云飘飘飘 2010-09-14
  • 打赏
  • 举报
回复
char (*(*x[3])())[5]
x: array[3] of pointers to functions returning pointer to array[5] of char

x ------->开始
x[3]------>数组
*x[3]-----》数组里面存储的是指针
(*x[3])------》
(*x[3])()----》数组里面的存储的指针 指向函数
*(*x[3])()-----》函数的返回值是指针
*(*x[3])()-------》
(*(*x[3])())[5]----》函数的返回 的指针指向有5个元素的数组数组
char(*(*x[3])())[5]---》数组中的每个元素是char型的

分析得不错,不过没有见过这么复杂的例子
hai040 2010-09-14
  • 打赏
  • 举报
回复
这跟虚函数有什么关系?
一般不会这么复杂
hastings 2010-09-14
  • 打赏
  • 举报
回复
~~好凌乱~~好复杂~~这些应该是模板元编程中用到比较多~~坐等LX回答~~
maoloverme1 2010-09-14
  • 打赏
  • 举报
回复

X是一个3维的函数指针数组,函数无参数,返回值是一个指向数组的指针,这个数组是5维的char数组
这种东西不实用,但是可以考察C语言的基础。
insanehui 2010-09-14
  • 打赏
  • 举报
回复
学习了,也明白了typedef是个好东东,但这个跟虚函数是怎么联系起来的呢?有谁详细讲解一下?
once_and_again 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dingshaofengbinbin 的回复:]

(*(*x[3])())[5]----》函数的返回 的指针指向有5个元素的数组数组
char(*(*x[3])())[5]---》数组中的每个元素是char型的
上面的解释错了!!
char(*(*x[3])())[5]---》函数的返回值是数组指针(char*)[5]
看下面的例子:
C/C++ code

#include<iostream>
using namespac……
[/Quote]

英文 是 这样说的:

x: array[3] of pointers
to functions
returning pointer to array[5] of char


函数的返回值 是 指针,指针指向有5个元素的数组,数组是char型,
我解释的应该没错,
你的程序我 运行了

// char *(*s[2])(); 这句是多余的。

你的程序中函数的返回值是 s
typedef char (*s)[1];


s是个数组指针....

我最后有个笔误

char(*(*x[3])())[5]---》函数的返回值是数组指针(char*)[5] 《这里写错了》
char(*(*x[3])())[5]---》函数的返回值是数组指针char(*s)[5]


多谢指正!
many thanks!




once_and_again 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 csucdl 的回复:]

等价变换如下:
char (*(*x())[])()
typedef char(*PFunction)();
typedef PFunction(*PArray)[];
PArray x();
[/Quote]

多谢!

69,322

社区成员

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

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