您的位置:首页 > 其它

复杂声明的分析过程

2013-05-16 16:00 141 查看
复杂声明的分析过程

步骤号 匹配的符号 如何阅读

1取最左边的标识符 标识符 表示“标识符是”

2 查看标识符右边的下一个

符号,如果是【】 【元素个数等数组参数】 对于每一对,表示“……的数组”

3 如果是一个左括号

表示 可能的参数 到右括号为止的内容“返回……的函数”

4 如果左边的符号是( 已经处理的内容 这个左括号把已经处理的部分组合在一起,直到遇见相应的右括号,

然后从第2步从新开始

5.如果左边 的符号是

const const 继续向左边读符号,直到读的符合不是3个之一。

volatile volatile volatile const表示“只读”

* * *表示“指向……的指针”然后重复第4步

6剩下的符号形成声明的基本类型 基本类型 可一并阅读,如static unsigned int

举例说明:

(1) char **argv

找到标识符“argv",右边没有符号,左边第一个为“*”,说明“argv”是一个指针,然后继续往前,又是一个“*”,说明“argv"是一个指向指针的指针,继续往前是”char",那么改声明的含义为“argv是一个指针,它指向一个指向char类型的指针”

(2) int (*daytab)[13]

第一步找到标识符"daytab",右边第一个为右括号,找到左边第一个左括号,将括号里面的结合起来,括号中daytab右边没有符号,左边第一个符合,为“*”,说明daytab是一个指针,然后跳出括号,继续往右,是“【13】,说明是指向一个”有13个元素的数组“,然后向左,”int“,结合起来,该声明的含义”daytab是一个指针,它指向一个有13个元素的数组,数组的元素为整型数据“

(3) int *daytab[13]

找到左边第一个标识符“daytab",向右第一个为[13],而且【】优先级高于*,说明daytab是一个含有13个元素到数组,往前是"*,说明数组的元素是指针,指向什么呢,然后往前读到int,说明”daytab是一个含有13个元素的数组,数组的元素为指向int型数据的指针“

(4) void *comp()

找到左边第一个标识符“comp",右边的括号优先级高于*,说明comp是一个函数,下一个是*,说明函数的返回值是指针,什么指针呢,往前是void,”comp是一个函数,函数返回到是空指针“

(5)void (*comp)()

找到标识符“comp”,右边是右括号,往左是"*“,说明comp是个指针,往左找到左括号,然后跳出括号往右,是”()“说明,comp是指向一个函数,往左是void,函数的返回值为空

(6)char (*(*x())[])()

找到标识符‘x'.右边第一个为()说明"x"首先是一个函数,往左“*”,说明是函数的返回值是指针,往右是右括号,往左找到左括号,跳出括号,往右是【】,说明函数的返回值的指针是指向一个数组,什么样到数组呢,继续往右是),往左是*,说明数组的元素是指针,之前找到右括号,那么肯定有对应的左括号,跳出括号,右边是(),说明数组元素的指针指向的是函数,什么函数?“char",结合起来就是”x是一个函数,函数的返回值是一个指向数组元素为指向返回char类型函数的指针的指针“更详细的说法“x是一个函数,函数的返回值是一个指针,该指针指向一个数组,被指向数组的元素又是一个指针,这个指针指向返回值为char的函数”

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

找到标识符x,【】优先级高于*,说明x首先是个数组,数组的元素的个数为3,该读“*",元素的特征是指针,遇到一个括号,跳出括号,右边是(),说明数组中的指针指向函数,什么函数前面读到指针,说明函数的返回值是一个指针,指针指向哪?跳出第一个(),读到”【5】“说明指向的是一个5个元素的数组,什么元素的数组,往前一看是char,结合起来就是”x是一个3个元素的数组,数组中的元素是一个指针,该指针指向一个函数,函数的返回值又是另一个指针,这个指针指向一个5个元素的数组,数组的元素是char类型。

该方法总结起来就是,先找到标识符,然后前后判断符号的优先级,找到"()"“*”“【】”其中一个组成一个新的“标识符”,然后在这个新的标识符的前后判断符号的优先级,找到"()"“*”“【】”其中一个组成一个新的“标识符”,直到不能组合为止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: