- 12
- 0
- 约4.87万字
- 约 94页
- 2017-03-05 发布于重庆
- 举报
C深度解剖
第一章节
本内容由凯幽网【痴情流氓】制作,要更多请到手机网下载
第一章关键字
每次讲关键字之前,我总是问学生:C语言有多少个关键字?sizeof怎么用?它是函数
吗?有些学生不知道C语言有多少个关键字,大多数学生往往告诉我sizeof是函数,因为
它后面跟着一对括号。当投影仪把这32个关键字投到幕布上时,很多学生表情惊讶。有些
关键字从来没见过,有的惊讶C语言关键字竟有32个之多。更有甚者,说大学老师告诉他
们sizeof是函数,没想到它居然是关键字!由此可想而知,大学的计算机教育是多么失败!
表(1.1)C语言标准定义的32个关键字
关键字意义
auto声明自动变量,缺省时编译器一般默认为auto
int声明整型变量
double声明双精度变量
long声明长整型变量
char声明字符型变量
float声明浮点型变量
short声明短整型变量
signed声明有符号类型变量
unsigned声明无符号类型变量
struct声明结构体变量
union声明联合数据类型
enum声明枚举类型
static声明静态变量
switch用于开关语句
case开关语句分支
default开关语句中的“其他”分支
break跳出当前循环
register声明寄存器变量
const声明只读变量
volatile说明变量在程序执行中可被隐含地改变
typedef用以给数据类型取别名(当然还有其他作用)
下面的篇幅就一一讲解这些关键字。但在讲解之前先明确两个概念:
什么是定义?什么是声明?它们有何区别?
举个例子:
A)inti;
B)externinti;(关于extern,后面解释)
哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎没有一
人能回答上这个问题。这个十分重要的概念在大学里从来没有被提起过!
什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它
取上一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字一旦和
这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊。^_^),它们就同
生共死,终生不离不弃。并且这块内存的位置也不能被改变。一个变量或对象在一定的区
域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义
同一个变量或对象。
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何
从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的。声明可以出
现多次。
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量
名或对象名。比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预
订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声
明最典型的例子就是函数参数的声明,例如:
voidfun(inti,charc);
好,这样一解释,我们可以很清楚的判断:A)是定义;B)是声明。
那他们的区别也很清晰了。记住,定义声明最重要的区别:定义创建了对象并为这个
extern声明变量是在其他文件正声明(也可以看做是引用变量)
return子程序返回语句(可以带参数,也可不带参数)
void声明函数无返回值或无参数,声明空类型指针
continue结束当前循环,开始下一轮循环
do循环语句的循环体
while循环语句的循环条件
if条件语句
else条件语句否定分支(与if连用)
for一种循环语句(可意会不可言传)
goto无条件跳转语句
sizeof计算对象所占内存空间大小
对象分配了内存,声明没有分配内存(一个抱伊人,一个喝稀粥。^_^)。
1.1,最宽恒大量的关键字----auto
auto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量
都是auto的。
1.2,最快的关键字----register
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中而不是通过内
存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个CPU的寄存器也就那么
几个或几十个,你要是定义了很多很多register变量,它累死也可能不能全部把这些变量放
入寄存器吧,轮也可能轮不到你。
1.2.1,皇帝身边的小太监----寄存器
不知道什么是寄存器?那见过太监没有?没有?其
原创力文档

文档评论(0)