读书人

C专家编程精粹篇-头疼的C语言声明:co

发布时间: 2012-06-25 18:37:39 作者: rapoo

C专家编程精华篇----头疼的C语言声明:const、typedef、define及函数高级声明

**************const有关的变量声明*****************

(1)const == read-only

const修饰的变量被许多人错误的认为是常量,但是const所修饰的变量应该是只读变量

检验这个结论可以用下面这个方法:

大概看到的人都有一点昏迷了。。。。

下面给出读懂复杂的函数声明的要诀:

最重要的是弄懂各种操作符的优先级,其次先通过最后一对操作符来判断是函数还是数组

在函数的高级声明中,主要用到()、[]和*操作符,只需记住()[]->.四个操作符的优先级最高即可

以第三个为例,来分析一下高级声明该怎么理解:

1、有三对圆括号,最后一对是方括号,说明是一个指向数组的指针吧,数组长度为6;

2、(这里有重大修改,先前写的是从最里层开始分析)先从最外层开始分析,int *(A)[6],我们

可以确定是一个A是一个指向int *型的数组,长度为6,再分析A

3、A为(*(*abc)()),从里层的两个圆括号看,其中一个圆括号为空,说明肯定是一个函数,也就是

说整个的最外层int *()[6]肯定是一个函数的返回值了,在看(*abc)这是一个abc指向的函数指针,返

回值是什么?通过两个并排的原括号前面的*决定,这里(*abc)之所以没有先于*一起结合看而先于()

一起结合看作一个函数,是因为*的优先级没()高

4、*决定了里层的函数指针的返回值,它的内容当然就是外层的那些个东东,即是:指向int型数组

的一个指针

5、先在加上对里层的分析,结论就是:

返回值为“指向int型数组的指针”的函数指针

整个的顺序是简化出来是这样:

int *( )[6]---->确定这是一个指向int型数组的指针

int *( (*abc) )[6]---->abc肯定是一个指针了,具体还无法判断

int *( (*abc)())[6]---->这下可以确定另一个东西了,abc是一个指针函数,函数总得有返回值吧,继续

int *(*(*abc)())[6]---->返回值出来了,通过第二个*确定的,它表明返回的是外面那个*所指向的内容

整个过程总结为:

A、先取最外层的,抽出里层内容,对里层的从它的名字开始读取,按照优先级顺序依次读取

B、优先级顺序:

1、声明中被圆括号括起来的部分

2、后缀操作符:()函数、[]数组

3、前缀操作符:*指向什么的指针

C、如果还有const、volatile关键字在类型说明符前面说明它作用于类型说明符,如前面讲的const的

修饰作用,其他情况他俩一般作用于它左边紧挨的*操作符

(由于昨天刚开始写这个声明的分析时头脑还没怎么理顺这个思路,造成解说的很混乱,今天重新对

此进行整理,如果有错,请大家友情指出。)

读书人网 >编程

热点推荐