到现在为止,我们已经回顾了声明的各个组成部分。本节描述了一种方法,用通俗的语 言把声明分解开来,分别解释各个组成部分。要理解一个声明,必须要懂得其中的优先级规 则,语言律师们最喜欢这种形式,它高度简洁,可惜极不直观。

理解C语言声明的优先级规则

A      声明从它的名字开始读取,然后按照优先级顺序依次读取。

B      优先级从高到低依次是:

B. 1声明中被括号括起来的那部分

B. 2后缀操作符:

括号(:1表示这是一个函数,而方括号U表示这是一个数组。

B. 3前缀操作符:星号*表示“指向...的指针”。

C 如杲const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么 它作用于类型说明符。在其他情况下,const和(或)volatile关键字作用于它左边 紧邻的指针星号。

用优先级规则分析C语言声明一例:

char * const *(*next)();

把上述分析结果加以概括,这个声明表示“next是一个指针,它指向一个函数,该函数 返回另一个指针,该指针指向一个类型为char的常量指针”,大功告成。优先级规则浓缩了 所有的规则,如果你更喜欢看上去直观一些的方法,请看图3-1。

C语言中的声明读起来并没有固定的方向,一会儿从左读到右,一会儿又从右读到左,真不知该用一个怎样的词来描述这个 情况。一开始,我们从左边开始向右寻找,直到找到第一个标识符。当声明中的某个符号与图中所示匹配时,便把它从声明中处 理掉,以后不再考虑。在具体的每一步骤上,我们首先査看右边的符号,然后再看左边。
当所有的符号都被处理完毕后,便宣告大功告成。

C专家编程 五 声明的优先级规则相关推荐

  1. C语言的声明的优先级规则

    C语言的声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是:   B.1 声明中被括号括起来的那一部分   B.2 后缀操作符[圆括号 ()表示这 ...

  2. 理解C语言声明的优先级规则

    A    声明从它的名字开始读取,然后按照优先级顺序依次读取: B    优先级从高到低依次是: B.1    声明中被括号括起来的那部分: B.2    后缀操作符: 括号()表示这是一个函数,而[ ...

  3. 分析C语言的声明——《C专家编程》

    <C专家编程>一书第三章分析了C语言声明的优先级规则,并以 char * const *(*next)(); 为例,用优先级规则对该声明进行分析. 优先级规则如下: 对上述声明的分析过程如 ...

  4. 《C专家编程》第三章——分析C语言的声明

    前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...

  5. C专家编程读书笔记一:C语言晦涩难懂的声明

    理解C语言声明的优先级规则: 声明从它的名字开始读取,然后按照优先级顺序依次读取 优先级从高到低依次是: B1     声明中被括号括起来的那部分 B2     后缀操作符:括号()表示是一个函数,二 ...

  6. 《C专家编程》学习笔记

    Chapter 1 char *cp; const char *ccp; ccp = cp; ccp是有指向有const 限定符的char 的指针,cp是指向没有限定符修饰的指针:左操作数具有右操作数 ...

  7. 《C专家编程》读书笔记3

    第三章 分析C语言的声明 3.1    只有编译器才会喜欢的语法 char (*j) [20];/*j是一个指向数组的指针,数组内有20个char元素*/ j = (char (*)[20]) mal ...

  8. C专家编程 模块化与有限机编写cdecl声明程序

    自己编写cdecl: //char * const *(*next)();示例 //结果:identifier is(标识符是)next //指向next的指针函数返回指向const的指针指向char ...

  9. C专家编程 精编之一

    C专家编程  精编之一     第一章~第三章 C的复杂之处 在于它的指针 ,但是比其指针更为复杂的是它的声明 !!! 你能看懂它们的意思 吗? apple=sizeof(int)*p  ;   ap ...

  10. C专家编程-读书笔记(书本顺序)

    C语言设计哲学:   一切工作程序员自己负责.   语言中的所有特性都不需要隐式的运行时支持.   程序员所做的都是对的.   程序员应该知道自己在干什么,并保证自己的所作所为是正确的. ====== ...

最新文章

  1. GitHub NetFlow
  2. SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis
  3. 关于SAP CRM Organization Unit组织结构单元自动决定的一些调试
  4. 牛客题霸 [反转字符串] C++题解/答案
  5. 【渝粤教育】广东开放大学 性考 形成性考核 (33)
  6. PHP time zone unknown Fail
  7. vue 手指长按触发事件
  8. count(1)与count(id)与count(*)效率,以及覆盖索引,索引下推
  9. 怎样用js结合h5画出多头像组合头像
  10. Thrift 个人实战--Thrift RPC服务框架日志的优化
  11. 十天学会单片机(一)
  12. 解析几何:第六章 二次曲面(2)抛物面 二次锥面 柱面 一般二次曲面
  13. ubuntu软件:无法从“extensions.gnome.org”下载更新
  14. 使用java进行SSL证书的签名与签验
  15. Java实现23种设计模式教程(作者原创)
  16. Matlab坐标轴标注和特殊字体
  17. 软考回顾-系统架构设计师-2018
  18. 连续六个季度实现盈利改善,达达集团内外双重确定性凸显
  19. matlab中的conj函数,matlab中 conv和xcorr两个函数的区别conj()函数
  20. 用DP-GEN跑个简单的例子吧——CH4

热门文章

  1. 计算机开机切换用户界面,win7开机登录界面怎么设置?win7更换开机画面壁纸解决办法...
  2. Namp 基础使用教程
  3. android关机铃声代码,android系统添加关机铃声
  4. (二)NIST CSF-框架基础
  5. 长短时记忆神经网络(LSTM)
  6. CSDN数据泄密凸显数据安全黑洞 飞客提示注意数据库保护
  7. 基于java的飞机大战雷电游戏的开发与设计#毕业设计
  8. 开源内网DNS服务器软件介绍
  9. 诺基亚PC套件在windows 2003安装的方法
  10. 计算机地图制图符号制作的心得,计算机地图制图原理与方法——地图符号设计参考文档...