您的位置:首页 > 编程语言 > C语言/C++

《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语言声明的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: