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 优先级较高的是右边的括号,所以“next是一个函数指针,指向一个返回。。。的函数”

B.3 然后,处理前缀“*”,得出指针所指的内容

C 最后,把“char *const”解释为指向字符的常量指针

综上所述,next是一个指针,指向一个函数,该函数返回另一个指针,该指针类型指向一个类型为char 的常量指针。

时间: 2024-11-07 02:59:19

c专家编程---优先级规则的相关文章

C专家编程学习 1

1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a (y) a_ex(y) a(x)被扩展为 (y) a_ex(y)(x) #define宏的用法 1.简单宏定义 1 #define a y 将文件中的 a 全部换成 y 为了避免出现问题,要将宏展开,根据运算符的优先级判断是否是需要的运算顺序. 2.带参数的宏定义 1 2 #define a(y) a

《C专家编程》读书笔记

<C专家编程>读书笔记 C语言的设计哲学: 一切工作程序员自己负责. 语言中的所有特性都不需要隐式的运行时支持. 程序员所做的都是对的. 程序员应该知道自己在干什么,并保证自己的所作所为是正确的. --第1章-- C: 穿越时空的迷雾 小即是美.事物发展都有个过程,由简入繁,不能一开始就想得太复杂,Multics, IBM的OS/360都是因此而失败. C语言的许多特性是为了方便编译器设计者而建立的.----唉,怎么这个样子 C语言的基本数据类型直接与底层硬件相对应.----确实如此 regi

C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载

Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍.书中C的历史.语言特性.声明.数组.指针.链接.运行时.内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析.全书撷取几十个实例进行讲解,对C程序员具有非常高的实用价值.<C和C++经典著作?C专家编程Expert C Programming De

看书小记6(《C专家编程》)

typedef不常见但值得一提的用途: 1. 用typedef来定义与平台无关的类型. 比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为: typedef long double REAL; 在不支持 long double 的平台二上,改为: typedef double REAL; 在连 double 都不支持的平台三上,改为: typedef float REAL; 也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改. 标准库就

《C专家编程》数组和指针并不同--多维数组

<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并非自身,而是描述其他地方创建的对象,声明可以多次出现: 定义相当于特殊声明:它可以为对象分配内存,只能出现在一个地方. 1.2 数组和指针的访问方式 左值和右值 ???????? X = Y ; 符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方. 符号Y的含义是Y所代表的地址的内容,这被称为右值,右值直到运行时

《C专家编程》读书记录

其实,这本书适合没事的时候翻翻,随便打开哪一页,应该都可以看下去的.总体来说,写的比较欢脱,不像<C和指针>和<C陷阱和缺陷>的章节标题那么严肃,有时候还以为自己在看科技杂志.不过,理解书里面的内容反而需要有较高的C语言基础,内容结构比较松散,如果觉得没有逻辑性,可能是语言基础还掌握的不够. 比较喜欢第1章关于C语言的介绍,前世今生什么的. 2015年5月1日  星期五 天气 雨 第1章  C:穿越时空的迷雾 C语言的史前阶段:BCPL->B->New B->早期

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

C语言的声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是:   B.1 声明中被括号括起来的那一部分   B.2 后缀操作符[圆括号 ()表示这是一个函数,方括号 [] 表示这是一个数组]   B.3 前缀操作符[* 表示这是一个指向 ......的指针] C 如果  const 或  volatile如 关键字的后面紧跟说明符 [如  int. long等],那么它作用于类型说明符. 在其他情况下, const和[或] volatile关

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

A 声明从它的名字开始读取,然后按照优先级顺序依次读取. B 优先级从高到低依次是:    B.1 声明中被括号括起来的那部分    B.2 后缀操作符:         括号()表示这是一个函数,而         方括号[]表示这是一个数组.    B.3 前缀操作符:星号*表示 "指向-的指针". C 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符.在其他情况下,const和(或)volatile关键字作用于它左边

C专家编程 Expert C Programming

该书中一些思想还是比较有用的,但随着编译器以及规范的变化,书中有些内容已经发生了变化,以下是实践之后的一些总结. 1 - typedef int x[10] 和 define x int[10]  区别 define 定义为变量替换,而typedef为声明替换; #define peach int; unsigned peach i;  //wrong typedef int banana; unsigned banana i; //wrong 声明替换用typedef 识别数组和函数指针 e.