永发信息网

如何分析C语言复杂类型

答案:1  悬赏:80  手机版
解决时间 2021-01-25 03:46
  • 提问者网友:趣果有间
  • 2021-01-25 00:34
如何分析C语言复杂类型
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-01-25 02:11
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语言的数组名是一个右值,它不能作为左值来接收另一个数组(即数组名只能用来赋值而不可被赋值),因此函数返回值不能为数组,该声明非法。 在实际的编程过程中,这样的复杂声明并不提倡。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯