《C专家编程》学习笔记(分析C语言的声明)

本文深入探讨了C语言声明中的常见问题及其形成原因,包括声明的语法特性、结构体与联合体的应用、枚举的优点,以及如何正确使用typedef。此外,还详细解析了C语言声明的优先级规则,并通过具体实例帮助读者更好地理解和掌握C语言声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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语言声明的代码


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值