C专家编程-分析C语言的声明
2014-11-07 11:22
363 查看
1 理解C语言声明的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取。B 优先级从高到低依次是:
1 声明中被括号括起来的那部分
2 后缀操作符:括号() 表示这是一个函数,而方括号[] 表示这是一个数组。
3 前缀操作符:星号* 表示“指向…的指针”
C 如果const 和(或)volatile 关键字的后面紧跟类型说明符(如int,long等),它作用于类型说明符。在其他情况下,const 和(或)volatile 关键字作用于它左边紧邻的指针星号。
2 用优先级分析C语言声明一例
char * const * (*next) ();表1.1 用优先级规则解决一个声明
适用规则 | 解释 |
A | 首先,看变量名"next”,并注意到它直接被括号所括住 |
B.1 | 所以先把括号里的东西作为一个整体,得出"next“是一个只想…的指针 |
B | 然后考虑括号外面的东西,在星号前缀和括号后缀之间做出选择 |
B.2 | B.2规则告诉我们优先级较高的是右边的函数括号,所以得出"next”是一个函数指针,只想一个返回…的函数 |
B.3 | 然后,处理前缀"*",得出指针所指的内容 |
C | 最后,把"char * const” 解释为指向字符的常量指针 |
3 typedef int x[10] 和define x int [10]的区别
typedef 为数据类型创建别名,而不是创建新的类型。在typedef 和宏文本替换之间存在一个关键性的区别。正确思考这个问题的方法就是把typedef 看成一种彻底的“封装”类型----在声明它之后不能再往里面增加别的东西。
typedef和宏的区别:
首先,可以用其他类型说明符对宏类型名进行扩展,但对typedef 所定义的类型名却不能这样做。
[code]#define peach int
unsigned peach i; // 没问题
typedef int banana;
unsigned banana i; // 错误!其次,在连续几个变量的声明中,用typedef 定义的类型能够保证声明中所有的变量均为同一种类型,二用#define 定义的类型则无法保证。
[code] #define int_ptr int *
int_ptr chalk, cheese;
经过宏扩展,第二行变为:
int *chalk, cheese;
这使得chalk 和cheese 成为不同的类型,chalk是一个只想int 的指针,而cheese则是一个int。
typedef char * char_ptr;
char_ptr Bentley, Rolls_Royce;
Bentley和Rolls_Royce的类型依然相同,都是只想char的指针。
相关文章推荐
- C专家编程-Chapter3 C语言声明分析2
- C专家编程——分析C语言的声明
- C专家编程学习之第三章——分析C语言的声明
- 【c专家编程】分析c语言的声明
- 【C专家编程】第3章 分析C语言的声明
- c专家编程笔记之第三章分析c语言的声明
- C语言中声明及定义的区别:【C专家编程】
- [C专家]分析C语言声明—— 关于结构体
- C专家编程-Chapter3 C语言声明
- C专家编程精华篇----头疼的C语言声明:const、typedef、define及函数高级声明
- C专家编程:用python写cdecl程序,以分析C语言程序的声明语句
- [C专家]分析C语言声明——关于枚举
- [C专家]分析C语言声明——只有编译器才会喜欢的语法
- C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)
- C专家编程学习笔记——第三章:C语言的声明(一)
- C专家编程学习笔记——第三章(三):有效地解读C语言的声明
- c语言声明的优先级规则&//c语言声明的解码环[摘自c专家编程]
- [C专家]分析C语言声明——声明是如何形成的[1]
- [C专家]分析C语言声明——关于联合
- C语言指针与数组(C专家编程)