复杂声明的分析过程

复杂声明的分析过程

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

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类型。

该方法总结起来就是,先找到标识符,然后前后判断符号的优先级,找到"()"“*”“【】”其中一个组成一个新的“标识符”,然后在这个新的标识符的前后判断符号的优先级,找到"()"“*”“【】”其中一个组成一个新的“标识符”,直到不能组合为止。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值