c语言声明语法(参考其他文章)
来源:互联网 发布:java string compare 编辑:程序博客网 时间:2024/05/29 04:59
C语言的声明语法本身就是小的编程语言。其基本思想为让声明符模仿标识符的最终语法。
C89对声明的形式的规定:
声明说明符 初始化声明符表opt [opt的意思是option,可选]
- 声明说明符:
存储类型说明符 声明说明符opt基本类型说明符 声明说明符opt类型限定符 声明说明符opt
- 声明符:
包含字符 * ,[] , ( ) 与被声明的标识符(即名称),其声明了一个新的标识符,还表示标识符是数组、指针、函数还是其他任意组合。
声明符是初始化声明符表的主体,声明符规定如下:
指针opt 直接声明符
指针opt指的是指针声明符*,要注意的是,*属于声明符,而不是声明说明符的一部分。
指针opt又包含:
* 类型限定符表opt (如:int *const p)* 类型限定符表opt 指针 (如:const int * const *** const ** const p;)
第二条使得指针可以嵌套,这条规定产生复杂的声明形式
- 直接声明符和类型限定词表的内容:
直接声明符:标识符(声明符)直接声明符[常量表达式opt]直接声明符(形式参数类型表)直接声明符(标识符表opt)
- 类型限定符表:
类型限定符类型限定符表 类型限定符
C的声明的组织形式是以嵌套为基础的,是用嵌套声明组织起来的。一个声明说明符可以包含另一个声明说明符,这就是声明的嵌套,这种嵌套贯穿于整个声明之中。
一个非常简单的声明,其实就是由多个声明嵌套组成的,例如:
static const int i=10, j=20, k=30;
变量i前面就是声明说明符部分,有三个声明说明符:static const int,static是一个存储类说明符,它属于这种形式:
static 声明说明符
static后面的声明说明符就是const int,const是一个类型限定符,这也是个嵌套,它是由
const 声明说明符
组成,最后的int是一个类型说明符,到这里已经没有嵌套了,int就是最底的一层。对于存储类说明符、类型说明符和类型限定符的排列顺序,C标准并没有规定其顺序,谁嵌套谁都可以。换言之,上面的声明可以写成: int static const i=10, j=20, k=30; 或者const int static i=10, j=20, k=30;
声明符模仿标识符思想:
我们最常见到的对声明的描述是这样的:
存储类型 基本类型 类型限定词 最终声明符(可能包含初始化列表)
在c语言中,声明的语法与解释为
基本类型 生成基本类型的东西;
而不是
类型 标识符;
生成基本类型的东西,即——声明符——或是简单的标识符,或是如同*p,a[10],或f()这样符号,表明声明变量为指向基本类型的指针,基本类型的数组,或返回基本类型的函数。
例子:
<1>const int *p;
<2>int const *p;
<3>int *const p;
由c语言的声明标准可以知道<1>与<2>是等价的,表示指向只读常量的指针,可以从让声明符模仿标识符的思想考虑,即*p 在使用时表示一个被 const 修饰的 int 型只读常量,所以p表示指向常量的指针。
对于<3>,同样 *const p 为int型,const修饰p,表示p的值不可修改,p为指针,所以为指针常量。
typedef用来声明一个别名,typedef后面的语法,是一个声明。
教材中介绍typedef的时候通常会写出如下形式:
typedef int PARA;
其中int PARA 为一个声明,声明中的标识符即为别名,其代表最终声明符,如
typedef int a[10]; (a代表a[10])
typedef void (*p)(void); (p 代表 (*p)(void) )
虽然在功能上,typedef可以看作一个跟int PARA分离的动作,但语法上typedef属于存储类声明说明符,因此严格来说,typedef int PARA整个是一个完整的声明。
0 0
- c语言声明语法(参考其他文章)
- C语言声明语法
- C语言复杂声明语法
- 水滴石穿C语言之声明的语法
- 水滴石穿C语言之声明的语法
- 水滴石穿C语言之声明的语法
- 水滴石穿C语言之声明的语法
- C 语言之三 声明的语法
- 理解C/C++语言的声明语法-声明子
- C语言特殊语法系列文章
- jdk动态代理的实现原理(参考其他文章)
- C语言语法“陷阱”——函数声明
- Objective-C语法快速参考--(入门)
- 理解C语言中指针的声明以及复杂声明的语法
- 理解C语言中指针的声明以及复杂声明的语法
- Objective-C语法快速参考(语法速成)
- c语言语法(三)
- [objective-c教程] Objective-C语法快速参考(转)
- JAVA中String类的常用功能
- CSS定位之绝对定位
- SELinux中的sesearch命令找不到
- 各种浏览器全屏模式的方法、属性和事件介绍
- EM聚类算法简介
- c语言声明语法(参考其他文章)
- Android:解决列表滚动时背景色变黑的方法
- Android4.3 Bluetooth开篇
- ONE源代码分析——Report1
- 用javascript实现三级联动
- 关于Adroid开发中java.lang.VerifyError的解决方案
- UIScrollView 截图
- 修改EditText的光标位置
- Dedecms标签静态化的设置