当前位置:网站首页>C专家编程 第3章 分析C语言的声明 3.3 优先级规则
C专家编程 第3章 分析C语言的声明 3.3 优先级规则
2022-08-03 16:09:00 【weixin_客子光阴】
3.3 优先级规则
/*理解C语言声明的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取
B 优先级从高到低依次如下:
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号()表示这是一个函数,而
方括号[]表示这是一个数组。
B.3 前缀操作符:星号*表示“指向......的指针"。
C 如果const和(或)volatile关键字的后面紧跟类型说明符(如int, long等),那么
它作用于类型说明符。在其他情况下,const和volatile关键字作用于它左边紧邻的指针
星号。
*/
char * const * (*next)();
用优先级规则解决一个声明
使用规则 解释
A 首先,看变量名next,并注意到它直接被括号所括住
B.1 所以先把括号里的东西作为一个整体,得出“next是一个指向...的指针”
B 然后考虑括号外面的内容,在星号前缀和括号后缀之间做出选择
B.2 B.2规则告诉我们优先级较高的是右边的函数括号,所以得出“next一个
函数指针,指向一个返回...的函数”
B.3 再次,处理前缀“*”,得出指针所指的内容
C 最后,把char* const解释为指向字符的常量指针
/*next是一个指针,它指向一个函数,该函数返回另一个指针,
*该指针指向一个类型为char的常量指针 */
步骤号 匹配的符号 如何阅读
1.取最左边的标识符 标识符 表示“标识符是 ”
2.查看标识符右边的下一个 [可能的大小]... 对于每一对,表示
符号,如果是方括号 “...的数组”
3.如果是一个左括号表示 (可能的参数) 到右括号为止的内容
“返回...的函数”
4.如果左边的符号是一个左括号 ( 已经处理的内容 这个左括号把已经 处理的部分声明组合在一起,直到 遇见对应的右括号。然后从第2步 重新开始
5.如果左边的符号是下述之一: 继续向左边读符号,直到所读符号 const 不再是左边那3个之一。
volatile 如果符号是const,表示“只读”;
* 如果是volatile,表示“volatile”;
如果是“*”,表示“指向...的指针”;
然后重复第4步
6.剩下的符号形成声明的基本类型 剩余的符号可一并阅读,如:
static unsigned int
C语言声明的神奇解码环
图中忽略了typedef以简化声明。如果声明有typedef,就把它翻译成没有typedef的样子。如果它类似于“typedef p a...”这种形式,就把声明中所有类型为“a...”的内容用“p”来代替。 在分析这个声明时,需要逐渐把已经处理过的片段“去掉”,这样便能知道还需要分析多少内容。再次提醒,记住const表示“只读”,并不能因为它的意思是常量就认为它表示的就是常量。
char * const *(*next)();
分析一个C语言声明的步骤
剩余的声明 所采取的下一步骤 结果
(从最左边的标识符开始)
char * const *(*next)(); 第1步 表示“next是...”
char * cosnt *(*)(); 第2,3步 不匹配,转到下一步,表示“next是...”
char * const *(*)(); 第4步 不匹配,转到下一步
char * const *(*)(); 第5步 与星号匹配,表示“指向...的指针”,转第 4步
char * const *()(); 第4步 “(”和“)”匹配,转到第2步
char * const *(); 第2步 不匹配,转到下一步
char * const *(); 第3步 表示“返回...的函数”
char * const *; 第4步 不匹配,转到下一步
char * const *; 第5步 表示“指向...的指针”
char * const; 第5步 表示“只读的...”
char *; 第5步 表示“指向...的指针”
char; 第6步 表示“char”
边栏推荐
猜你喜欢
leetcode-693.交替位二进制数
参与便有奖,《新程序员》杂志福利来袭!
[微信小程序开发者工具] × #initialize
元宇宙系列--Value creation in the metaverse
leetcode SVM
30W 2C(JD6606S + FP6652X2)BOM
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流
How to analyze the weekly activity rate?
随机推荐
如何启动 NFT 集合
2021年数据泄露成本报告解读
MySQL查询语法
DataGrip数据仓库工具
Not to be ignored!Features and advantages of outdoor LED display
出海季,互联网出海锦囊之本地化
使用VS Code搭建ESP-IDF环境
Windows 事件转发到 SQL 数据库
黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris
生态剧变,电子签名SaaS模式迎来新突破,网络效应加速到来
MATLAB | 七夕节快到了,还不给朋友安排上这个咕呱小青蛙?
leetcode:187. 重复的DNA序列
基于DMS的数仓智能运维服务,知多少?
STM32 GPIO LED和蜂鸣器实现【第四天】
下午见!2022京东云数据库新品发布会
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【深度学习】今日bug(8月2)
正向代理与反向代理
【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer