永发信息网

如何分析C语言复杂类型

答案:1  悬赏:80  手机版
解决时间 2021-01-25 03:46
如何分析C语言复杂类型
最佳答案
C语言声明的复杂性多来自于各各种类型声明的嵌套。最为典型的便是指针、函数以及数组三者之间的混用。要想准确地理解复杂声明的确切含义,就需要一个清晰的条理逻辑。结合网络上的教程,修修补补完成了这篇教程。 网上的范例有很多,如:1、int (*func)(int *p);2、int (*func)( int *p, int (*f )( int*) );3、int func(void) [5]; 在逐个解析之前,要先说明一下解读的方法,比较著名且有效的就是“右左法则”:"The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed." “首先从最里面的圆括号看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。” 简单来说,可以归纳为:1、先看标识符:从左往右,有小括号括起来的算作一个。
2、再看右边:标识符右边有“[]”的,便为数组;有“()”的,便为函数。
3、最后看左边:根据类型符确定该声明的类型,有“*”说明是指针,需注意是否有括号将“*”和类型符隔开。 以上面的声明为例:1、int (*func)(int *p); int为类型符,(*func)为标识符,且右边跟有(),说明这是函数,该函数的形参是一个整型指针(int *p)。由类型符int可知这是一个返回值为整型的函数。(*func)是一个函数,因此func就是一个指向函数的指针。因此,int (*func)(int *p)是一个以整型指针为形参,返回整型的函数指针。2、int (*func)( int *p, int (*f )( int*) ); 与上例较为类似,不同的只是多了一个形参,多的那个形参即为上例的声明。3、int func(void) [5]; 该声明实际上是一个非法的声明。func是一个返回值为具有5个int元素的数组的函数。但C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的东西,也必须是一个数组,但C语言的数组名是一个右值,它不能作为左值来接收另一个数组(即数组名只能用来赋值而不可被赋值),因此函数返回值不能为数组,该声明非法。 在实际的编程过程中,这样的复杂声明并不提倡。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
绿壳蛋鸡的肉好吃吗?
怎么换灯开关啊?如图,有两盏灯,每盏灯两条线,
惠安西站的二/车站建设
手q飞车不删档什么意思
现在想买股票,买医药类的,2块1股的,风险不
梦见一排的尸体用布盖头的是什么意思啊?
鑫辉二手车(九江修水县)地址在什么地方,我要
喜庆茶楼地址在什么地方,想过去办事
大连市足球协会在哪,具体地址和电话,谢谢
解释下列词语。 ①纳罕:惊奇,诧异。 ②小心
在卡迪夫租房有哪些公寓比较方便?
我的脖子长淋巴结很长时间,不痛不痒,问题大
怎么给女朋友讲故事?
请问ThinkPad T540p用的到底是碳纤维还是玻璃
生物有别于非生物,即它们都是“活的”,是有
推荐资讯
[一个高智商问题……] ……c(女)和h(男)
上海市虹口区有和附近区的国美电器的地址
下列各项,不属于孕激素主要生理作用的是()A.
成都温江区怎么样
佳亨辅导托管中心地址在哪,我要去那里办事
听一些人说,一个人要是一直念叨一句话久了就
下图示意近年来珠江三角洲城市群热岛强度的时
给信用卡还款扣了好几百是什么
k644列车怎么不大量放票
钱家屯地址在哪,我要去那里办事
28岁,G2P0,孕31周,从28周开始反复阴道流血
怎么用硬盘版微pe安装系统
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?