永发信息网

c语言,解释下 char(*(*x()[5])() 的意思

答案:3  悬赏:0  手机版
解决时间 2021-01-27 18:40
c语言,解释下 char(*(*x()[5])() 的意思
最佳答案
typedef声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的。对于char (*(*x())[5])(); 我们可利用typedef来简化。

先定义:typedef char (*Fun)(); 那么:char (*(*x())[5])(); => Fun (*x())[5];再定义:typedef Fun A[5]; 那么:Fun (*x())[5]; => A *x(); 对于这种形式正是我们最熟悉的函数声明类型。

根据上面的简化模式,可逐步描述char (*(*x())[5])();的含义:
第一步:A *x(); 声明x是一个输入参数为空且返回A的指针类型的函数。
第二步:Fun (*x())[5]; 声明x是一个输入参数为空且返回指向含有5个Fun类型数组的指针的函数。
第三步:char (*(*x())[5])(); 声明x是一个输入参数为空且返回指向含有5个指向函数指针且返回值为字符类型的数组指针的函数。
利用上述的方法,几乎可以理解任何复杂类型的声明,例如Linux系统调用函数signal的函数原型如下:
void (*signal(int signo,void (*func)(int))) (int);
对于该函数原型,给人的第一感觉就是复杂,不知从何下手。其实同样可以利用上面所讲的typedef声明来简化:先定义typedef void (*sighandler_t)(int); 那么void (*signal(int signo,void (*func)(int))) (int); => sighandler_t signal(int signo, sighandler_t handler);
对于sighandler_t signal(int signo, sighandler_t handler); 就和我们常见的函数声明非常类似了,唯一不同的是sighandler_t不是我们常见的基本数据类型,假如你不知道sighandler_t具体是什么类型,为了快速理解sighandler_t signal(int signo, sighandler_t handler);的含义,你可以把sighandler_t想象成为你最熟悉的int或char类型,对于int signal(int signo, int handler);你会很轻松的理解,对于sighandler_t signal(int signo, sighandler_t handler);你只需要了解sighandler_t的类型(即typedef void (*sighandler_t)(int);),就可以理解signal函数的完整原型声明。
本文出自 “小麦” 博客
全部回答
同意一楼的
从内向外分析:
*x() : x是一个无参数函数,该函数返回一个指针
*(*x())[5] : 由于C语言声明的优先级规则是后缀优先于前缀,所以这里就要先考虑后面的[5],再看前面的星号,于是得出: x是一个无参函数,该函数返回一个指针,返回的这个指针指向一个有5个指针元素的数组。
char(*(*x())[5])() : 依然先看后缀得知这是个函数,而且没有参数,再看前缀,结合后缀可知这是一个返回值类型为char的函数,再结合对*(*x())[5]的分析得出最后结论:
x是一个无参数函数,该函数返回一个指针,返回的这个指针指向一个有5个指针元素的数组,该数组的每个元素都可指向一个返回值类型是char的元素函数。

参考资料:《C专家编程》

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
地材开票大厅地址在什么地方,想过去办事
赐顾的意思是什么啊?知道的请说下!
济南有那些外汇公司
为什么乙醇溶液浓度大密度小
里Excel 2003怎样算除法
美发和美食比对以后的发展哪个更好
新陂村地址在什么地方,想过去办事
ps4slim和pro入手哪个
关于饮片的供应,下列说法不正确的是A.查斗B.
济铁票务火车票代售处怎么去啊,我要去那办事
隐身草的意思是什么啊?知道的请说下!
坦克世界现在有注册新号送十级车的活动吗?,
彩票销售店(泰山路160)地址好找么,我有些事
百花社区居委会地址在什么地方,想过去办事
大力水手的对手叫什么
推荐资讯
为什么新买的苹果6不能登录qq
NicoleNail&Beauty(卓越发季店)怎么去啊
已知2y-3与3x+1成正比例,并x=2,y=5.求y与x之
下图是某生物的基因结构,有关说法正确的是A.
为什么纬度越高,日照时间越长
停车场(祥吴四路)地址有知道的么?有点事想过
在剧场里我是() 在公园里我是() 在商店里
宝骏560是什么年纪段的人开的
【什么的眼光】填词语什么的眼光
请问i一Shanxi是什么
14/9×7/15-5分之七乘以九分之五等于
从邹平做出租到济南芙蓉街一共多少钱?做公交
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?