《C专家编程》学习笔记(分析C语言的声明)
2014-06-18 09:48
162 查看
一、C语言声明的语法有时会带来严重的问题
1、“对象声明的形式和使用的形式尽可能相似”
1)、优点——各种操作符的优先级在“声明”和“使用”时是一样的。
2)、缺点——操作符的优先级设计不当、过于复杂。
2、无法以一种人们所习惯的自然方式从左到右阅读一个声明,在ANSI C加入volatile和const关键字后情况更糟。
1)、实例
a、const int * grape
b、 int const * grape
c、int * const grape_jeelly
d、const int * const grape_jam
e、 int const * const grape_jam
说明:a、b是一样的,都表示指针所指向的对象是只读的,c表示指针式是只读的,d、e也是一样的,都表示对象和指针都是只读的。
二、C语言声明是如何形成的
1、C语言中的声明器(P58表3-1)
2、C语言中的声明(P59表3-2) 注意:并非所有的形式组合都是合法的
3、结构(struct)
1)、声明——结构的内容可以是任何其他的数据声明,单个数据项、数组、其他结构、指针等。
注意:a、为了代码更加容易阅读,变量的声明应该与类型的声明分开。
b、参数在传递时首先尽可能地存放到寄存器中(追求速度)。
2)、结构中的数组
4、联合(union)
1)、声明
2)、优点
a、可用来节省内存空间
b、把同一个数据解释成不同的数据定义。
5、枚举(enum)
1)、声明
2)、优点
a、#define定义的名字一般在编译时被丢弃,但枚举名字移植在调试器可见,可以在调试代码中使用它们。
三、C语言优先级规则(重点)
1)、理解C语言声明的优先级规则(P64)
2)、C优先级直观分析法(P65表3-1)
四、通过图表分析C语言中的声明(重点)
通过P65表3-1进行分析。
五、typedef相关
1、作用:为一种类型引入新的名字,而不是分配空间。
注意:不要为了方便起见对结构使用typedef。
2、typedef的缺点
1)、语法混乱,可以把几个声明塞到一个声明中去。
2)、在任何typedef声明中,甚至不必把typedef放在声明的开始位置。
3、与#define的区别
1)、#deifne可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名不能这样做。
2)、在连续几个变量的声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型无法保证。
4、typedef应用范围
1)、数组、指针、结构以及函数的组合类型。
2)、可移植类型。
3)、为后面的强制类型转换提供一个简单的名字。
例:typedef int (*ptr_to_int_fun)(void);
char * p;......
=(ptr_to_int_fun) p
六、理解分析C语言声明的代码
1、“对象声明的形式和使用的形式尽可能相似”
1)、优点——各种操作符的优先级在“声明”和“使用”时是一样的。
2)、缺点——操作符的优先级设计不当、过于复杂。
2、无法以一种人们所习惯的自然方式从左到右阅读一个声明,在ANSI C加入volatile和const关键字后情况更糟。
1)、实例
a、const int * grape
b、 int const * grape
c、int * const grape_jeelly
d、const int * const grape_jam
e、 int const * const grape_jam
说明:a、b是一样的,都表示指针所指向的对象是只读的,c表示指针式是只读的,d、e也是一样的,都表示对象和指针都是只读的。
二、C语言声明是如何形成的
1、C语言中的声明器(P58表3-1)
2、C语言中的声明(P59表3-2) 注意:并非所有的形式组合都是合法的
3、结构(struct)
1)、声明——结构的内容可以是任何其他的数据声明,单个数据项、数组、其他结构、指针等。
注意:a、为了代码更加容易阅读,变量的声明应该与类型的声明分开。
b、参数在传递时首先尽可能地存放到寄存器中(追求速度)。
2)、结构中的数组
4、联合(union)
1)、声明
2)、优点
a、可用来节省内存空间
b、把同一个数据解释成不同的数据定义。
5、枚举(enum)
1)、声明
2)、优点
a、#define定义的名字一般在编译时被丢弃,但枚举名字移植在调试器可见,可以在调试代码中使用它们。
三、C语言优先级规则(重点)
1)、理解C语言声明的优先级规则(P64)
2)、C优先级直观分析法(P65表3-1)
四、通过图表分析C语言中的声明(重点)
通过P65表3-1进行分析。
五、typedef相关
1、作用:为一种类型引入新的名字,而不是分配空间。
注意:不要为了方便起见对结构使用typedef。
2、typedef的缺点
1)、语法混乱,可以把几个声明塞到一个声明中去。
2)、在任何typedef声明中,甚至不必把typedef放在声明的开始位置。
3、与#define的区别
1)、#deifne可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名不能这样做。
2)、在连续几个变量的声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型无法保证。
4、typedef应用范围
1)、数组、指针、结构以及函数的组合类型。
2)、可移植类型。
3)、为后面的强制类型转换提供一个简单的名字。
例:typedef int (*ptr_to_int_fun)(void);
char * p;......
=(ptr_to_int_fun) p
六、理解分析C语言声明的代码
相关文章推荐
- 读《C专家编程》笔记-第三章 分析C语言的声明
- 《C专家编程》笔记二:第三章 分析C语言的声明
- 《C专家编程》第三章——分析C语言的声明
- 根据运算符优先级分析变量声明——《C专家编程》笔记
- C语言拾遗(三):分析C语言声明
- 分析复杂的C语言声明
- 从两个例子分析C语言的声明
- cdecl程序,用于分析C语言的声明
- 如何分析复杂的C语言声明
- 分析C语言的声明
- 程序实现分析C语言的声明语句含义
- C语言的声明分析
- 分析C语言的声明
- Chapter_03 分析C语言的声明
- Chapter_03 分析C语言的声明
- C语言拾遗(三):分析C语言声明
- C专家编程-Chapter3 C语言声明分析2
- 分析C语言的声明
- 程序比程序员更理解c语言! cdecl程序(分析c语言的声明
- 【C专家编程】第3章 分析C语言的声明