免费注册 查看新帖 |

Chinaunix

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

c语言疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-10 14:56 |只看该作者 |倒序浏览
char (*(*x())[])() ;

        
char (*(*x[3])())[5] ;


以上两个声明是什么?是函数还是函数指针?它们的返回值和形参是什么?
请帮忙分析,最好把分析过程罗列出来。

论坛徽章:
0
2 [报告]
发表于 2012-01-10 23:41 |只看该作者
本帖最后由 kunkka_lu 于 2012-01-31 00:59 编辑

(1) 第一个是函数的声明, 可以从最后面的小括号来进行判断;
     其返回值的类型有一点绕, 可以一步一步进行分析:
     *x() 表示一个指向函数的指针, 该函数的参数类型为 void, 返回值类型为指针类型;
     (*x())[] 表示一个指向 *x() 函数的指针的数组;
     *(*x())[] 表示一个指向 *(x())[] 指针数组的指针;
     char 修饰后面的这一堆东东 (*(x())[]), 表明返回值的类型, 即返回值类型最终为一个char *的指针, 它指向(*(x())[])这个指针数组...

(2) 第二个是一个数组的声明, 同样从最后面的方括号可以看得出来;
     先从中间进行分析:
     (*x[3])() 表示一个参数类型为 void, 返回值类型为一个指向x[3]数组的指针的函数;
     (*(*x[3])()) 表示一个指向 (*x[3])() 这类函数的指针, char 修饰它;
     再加上最后面的 [5], 很明白吧, 就是一个函数指针数组了...

论坛徽章:
0
3 [报告]
发表于 2012-02-15 19:23 |只看该作者
研究这么无聊的东西干嘛?
回复 1# linnnnil


   

论坛徽章:
0
4 [报告]
发表于 2012-02-15 22:57 |只看该作者
回复 3# voidjackjiang
好耐某见!~~
不知道上面的解释是否对哦, 哈哈!~~


   

论坛徽章:
0
5 [报告]
发表于 2013-09-20 13:55 |只看该作者
Right! 其实可以有更方便的方法分析
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP