《C语言实训笔记》由会员分享,可在线阅读,更多相关《C语言实训笔记(35页珍藏版)》请在金锄头文库上搜索。
1、实训笔记2014.9.9C语言部分C语言关键字解析C语言关键字有32个,如表1所示。虽然简单,但还是让一些初学者犯错,譬如sizeof,好多初学者都认为是函数,其中包括我的一些同学,他们学过有好多年了,如此看来,有时我们追求高深的内容,往往会忽略基础的简单的内容!表1 C语言标准定义的32个关键字关键字意义auto声明自动变量,缺省时编译器一般默认为autoint声明整型变量double声明双精度变量long声明长整型变量char声明字符型变量float声明浮点型变量short声明短整型变量signed声明有符号类型变量unsigned声明无符号类型变量struct声明结构体变量union声明
2、联合数据类型enum声明枚举类型static声明静态变量switch用于开关语句case开关语句分支default开关语句中的“其他”分支break跳出当前循环register声明寄存器变量,空间有限const声明只读变量volatile说明变量在程序执行中可被隐含地改变-易变量typedef用以给数据类型取别名(当然还有其他作用)-变量类型重定义extern声明导出全局变量或者全局函数 是在其他文件中声明(也可以看return子程序返回语句(可以带参数,也可不带void声明函数无返回值或无参数,声明空类continue结束当前循环,开始下一轮循环do循环语句的循环体while循环语句的循环条
3、件if条件语句else条件语句否定分支(与if连用)for一种循环语句(可意会不可言传)goto无条件跳转语句sizeof计算对象所占内存空间大小在这里我们也不一一讲解每个关键字,只是讲讲比较容易被人忽略的或者易出错的关键字说明一下。在讲之前,先说明一下,定义和声明的区别:定义:编译器在创建一个对象时,为该对象申请开辟的内存空间,这个空间的的名字就是变量名或者对象名。同一个变量名在摸个区域内只能定义一次,重复定义会出现错误的。声明:有两种作用,1.告诉编译器,这个变量或者函数,我已经定义了(开辟空间了),但是在别的地方,我先说明一下,免得编译器报错。当然,声明可以多次出现。2.告诉编译器,这个
4、变量名或者对象名,我先预定了,其他地方不可以用了。和在饭馆吃饭(人多)要提前预约一样的道理。定义和声明最本质的区别在于,声明没开辟空间,而定义则创建对象(变量)并开辟了空间。这是最重要的一点。一. auto,register,extern,static,四种关键字C语言说明变量的时,同时给出了两个方面的信息:数据类型和存储类。C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。1.auto是变量是C语言最常用的。编译器在默认的缺省情况下,所有变量都是auto的。对于函数的形参,也是auto型的。2.extern,语言中存在这样的一种变量,在一个函数
5、中合法出现的同时,又可以在其他的函数中合法出现,这就是外部变量。它的生命周期是整个程序的执行周期。3.register,寄存器变量,其值存放在寄存器中,访问速度快。有最快的关键字的称呼。虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型。意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中,所以不能用取址运算符“&”来获取register变量的地址。4.static静态变量,两个作用。第一个作用:修饰变量,都存在内存的静态区。静态局部变量:出现在函数体内
6、,生命周期是整个程序的执行过程,由于被static修饰的变量总是存在内存的静态区,即使该函数生命结束,其值不会被销毁,同样要修改该变量,就要到函数内部完成,所以用起来比较安全,起到信息屏蔽的作用。静态全局变量:出现在函数体外,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。第二个作用,修饰函数,函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。二.基本数据类型-short、i
7、nt、long、char、float、double这些关键字都是基本的数据类型,每种类型占据的内存空间不一样,其实每种类型相当于一个模型,再通俗点就是一个模子。具体占多少个字节,可以用关键字sizeof去测一下。另外就就是存储问题。不论是float还是double在存储方式上都遵从IEEE的规范,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。#include int main() float a=999.999; float b=0.005; printf(%lf/n,a+b-1000.004); return 0;看看得到的结果并不是0,按数学计算本来应该
8、是0,但由于浮点数的存储有微小的误差从而导致计算结果不是0double m=3.3;cout指向结构体成员运算符;. 结构体成员运算符。2级(右结合)“ ! ”逻辑非运算符;“ ”按位取反运算符;“ + ”前缀增量运算符;“ - ”前缀减量运算符;“ - ”负号运算符;(类型)类型转换运算符;“ * ”指针运算符;“ & ”地址运算符。3级(左结合)“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。4级(左结合)“ + ”加法运算符;“ - ”减法运算符。5级(左结合) 右移运算符。6级(左结合)、=关系运算符。7级(左结合)“ = ”等于运算符;“ != ”不等于运算符。
9、8级(左结合)“ & ”按位与运算符。9级(左结合)“ ”按位异或运算符。10级(左结合)“ | ”按位或运算符。11级(左结合)“&”逻辑与运算符。12级(左结合)“ | ”逻辑或运算符。13级(右结合)? :条件运算符。14级(右结合)=、 +=、 -=、 *=、 /=、 %=、 &=、 =、 |=、 =赋值运算符。15级(左结合)“,”逗号运算符。C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comma Operator)。逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式,称为逗号表达式。其一般形式为:子表达式1, 子表达式2, ., 子表达式n例如:a + b, c = b, c+逗号运算符的优先级是所有运算符中级别最低的,通常配合 for 循环使用。逗号表达式最右边的子表达式的值即为逗号表达式的值。上例中,c+ 的值(c 自增之前的值)即为该表达式的值。逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。