c语言学习之五:声明

1.声明的构成

   声明的核心是:声明器(declarator),所谓declarator,就是标识符及与它组合在一起的指针、函数括号和数组下标等,如下图所示:

 

数量

c语言中的名字

c语言中的表现形式

零个或多个

指针

*const volatile   *volatile   *  *const   *volatile const

有且只有一个

直接声明器

标识符、标识符(参数)、标识符[下标]、(标识符)

 

零个或一个

初始化

= 初始值

 

 

  一个完整的声明由下表中的各个部分组成:

 

数量c语言中的名字c语言中的表现形式
至少一个类型说明符类型说明符




存储类型
类型限定类型

void char short int long signed
unsigned float double
结构说明符
枚举说明符
联合说明符
extern static register
auto typedef
const volatile

 

有且只有一个直接声明器

参见上面的定义

 

零个或多个更多声明器

,声明器

 

一个分号;

 

 

 

2.理解c语言的优先级规则

优先级规则:

A. 声明从它的优先级规则开始,然后按照顺序依次读取;

B. 优先级从高到低依次是:

b.1 声明中被插号括起来的那部分

b.2 后缀操作符:括号()表示这是一个函数,而[]表示这是一个数组

b.3 前缀操作符:星号*表示“指向…的指针”

C. 如果const和(或)volatile关键字的后面紧跟着类型说明符(如int, long),那么它作用于类型说明符;在其它情况下,它作用于它左边紧邻的星号。

 

下面是对优先级规则的一种解释

步骤号如果阅读
1.取最左边的标识符表示“标识符是”
2.查看标识符右边的的下一个符号,如果是方括号对于每一对,表示“…的数组”
3.如果是一个左括号到右括号为止的内容,表示“返回…的函数”
4.如果左边的符号是一个左括号这个左括号把已经声明的内容组合在一起,直到遇见对应的右括号,然后从第2步重新开始
5.如果左边的符号是下述之一:const、volatile、*继续向左边读符号,直到不是那3个符号为止。如果符号是const,表示“只读”;如果是volatile,表示“volatile”;如果是*,表示”指向…的指针”。然后重复从第4步。
6.剩下的符号形成声明的基本类型剩余的符号可一起阅读

 

举例说明如下:

char *(* c[10])(int **p);

剩余的声明步骤结果
char *(* [10])(int **p)第1步标识符是c
char *(* )(int **p)第2步表示 c是一个含有10个元素的数组,元素类型是…
char *()(int **p)第5步表示 c是一个含有10个元素的数组,其元素类型是指向…的指针
char * (int **p)第4步表示 c是一个含有10个元素的数组,其元素类型是指向…的指针
char * 第3步表示 c是一个含有10个元素的数组,其元素类型是指向函数的指针,这个函数接收一个指针的指针作为参数
char第5步表示 c是一个含有10个元素的数组,其元素类型是指向函数的指针,这个函数接收一个指针的指针作为参数,返回一个指向…的指针
 第6步表示 c是一个含有10个元素的数组,其元素类型是指向函数的指针,这个函数接收一个指针的指针作为参数,返回一个指向字符的指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值