免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 23186 | 回复: 18
打印 上一主题 下一主题

char *(*(* var)())[10]表示什么 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-02 00:55 |只看该作者 |倒序浏览
char *(*(* var)())[10]


直接看迷糊了,大家给解释下

论坛徽章:
0
2 [报告]
发表于 2009-08-02 01:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-08-02 02:01 |只看该作者
难懂,,那这些呢:

char * (* var[10])();
char * (* var)[10]();

论坛徽章:
0
4 [报告]
发表于 2009-08-02 07:51 |只看该作者
2楼正解!
关键字:复杂指针  右左法则

论坛徽章:
0
5 [报告]
发表于 2009-08-02 09:30 |只看该作者
char * (* var[10])();  
var是一个大小是10的数组, 数组的成员是指向函数的指针, 该函数无参数,且返还值是char的指针
至于第二个
char * (* var)[10]();
请见谅,我认为是错误的定义
按上面定义,var是一个指针,指向一个数组,当解析到[10]时,是又边的()先修饰, 那么数组的成员就是()不会吧,
char * 根本没法解析呢

这是我的理解, 不知道对不对, 不对请指出

论坛徽章:
0
6 [报告]
发表于 2009-08-02 09:31 |只看该作者
《c专家编程 》里有讲到。
1)char *(*(* var)())[10]
大概意思就是从标识符开始,往右看(但不跨越括号),没有就没有,然后向左看(同样不跨越括号),如上面那个,读到一个*,那说明是个指针。
接下来开始第二次,这次跨越括号,还是向右读,看到的是(),是个函数,向左是指针;
第三次,向右是数组,向左读是char *

综合起来就是它是个指针,指向一个函数,此函数参数为空,返回的也是指针,此指针指向的是个数组,此数组里有10个指向char的指针。

像这个
2)char * (* var[10])();
读到 一个10个元素的数组,一个指针,一个函数,一个char * ===》一个带10个函数指针的数组,指向的函数无参,返回char *   

3)char * (* var)[10]();   这个是哪来搞出来的, 按此规则就不行了

论坛徽章:
0
7 [报告]
发表于 2009-08-02 09:37 |只看该作者

回复 #5 tianxiaogang12 的帖子

应该是第二表达式有问题了,反正我头一次读到这样的

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
8 [报告]
发表于 2009-08-02 10:21 |只看该作者
typedef char* array[10];
array* (*var)();

使用这个更明了些


3楼可能是想表达这种写法

char* (* var[10])();

函数指针数组



另外, 既然提到了 C专家编程, 为啥不把那几个表格也贴一帖。



如果你觉得很难明白,以后在代码中就尽量避免这种写法, 这个算有些复杂了。
不管什么语言, 都有一种重要用途, 就是交流

论坛徽章:
0
9 [报告]
发表于 2009-08-02 14:14 |只看该作者
原帖由 bsdc 于 2009-8-2 09:31 发表
《c专家编程 》里有讲到。
1)char *(*(* var)())[10]
大概意思就是从标识符开始,往右看(但不跨越括号),没有就没有,然后向左看(同样不跨越括号),如上面那个,读到一个*,那说明是个指针。
接下来开始 ...


呵呵,,这好像这样:
int *p[10];
int (*p)[10];

我想表达下面一种效果,指向数组的指针。。:lol:

论坛徽章:
0
10 [报告]
发表于 2009-08-02 19:28 |只看该作者
对于复杂声明,换用一系列的typedef会表达的更清楚,例如以下声明等价
(1)char *(*(*a[N])())();
(2)用typedef逐步完成声明:
typedef char *pc;       /* pointer to char */
typedef pc fpc();         /* function returning pointer to char */
typedef fpc *pfpc;       /* pointer to above */
typedef pfpc fpfpc();    /* function returning ... */
typedef fpfpc *pfpfpc;  /* pointer to... */
pfpfpc a[N];                  /*array of... */

声明了一个包含N个指向返回指向字符的指针的函数的指针的数组。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP