C语言32个关键字 您所在的位置:网站首页 c语言的area C语言32个关键字

C语言32个关键字

2024-06-30 19:05| 来源: 网络整理| 查看: 265

C语言关键字,看这一篇就够了 一、数据类型关键字二、控制语句关键字三、存储类型关键字四、其它关键字五、表格汇总

在了解关键字之前,先要明确定义与声明的区别: 定义: 编译器创建一个对象,为这个对象分配一块内存并给取一个名字,这个名字成为变量名或对象名。 声明:告诉编译器,这个名字已经匹配到一块内存上了,其不能再用这个名字进行定义。 主要区别:定义创建了对象并为这个对象分配了内存,而声明没有分配内存。

C语言标准定义的32个关键字可以分为如下四类:

一、数据类型关键字 序号关键字说明1char声明字符变量2double声明双精度变量3float声明浮点型变量4int声明整型变量5short声明短整型变量6long声明长整型变量7unsigned声明无符号类型变量8signed声明有符号类型变量9struct声明结构体变量10union声明共用体或联合数据类型11void声明函数无返回值或无参数,声明无类型指针12enum声明枚举类型

重点说明: 1、chart、short、int、long、float、double 有一个常被提及的问题:int类型究竟占多少个字节?一般默认为4个字节,而有一点功底的人都知道它的大小是跟机器有关的,感兴趣的可以查看其它文章。int具体大小可用sizeof关键字查看,代码如下:

# include void main() { printf("char类型变量大小为%d字节\n",sizeof(char)); printf("short类型变量大小为%d字节\n",sizeof(short)); printf("int类型变量大小为%d字节\n",sizeof(int)); printf("long类型变量大小为%d字节\n",sizeof(long)); printf("float类型变量大小为%d字节\n",sizeof(float)); printf("double类型变量大小为%d字节\n",sizeof(double)); }

运行结果:

2、signed、unsigned signed和nsigned用于修饰整数类型。默认的int、short、long为有符号数,如signed int 等价于 int(其它类推)。

另外,char共有三种不同的类型:char、signed char、unsigned char。char类型是真正的字符类型,用来声明字符;而signed char和unsigned char是用来声明数值的。因此不要将三者混用。

数值范围如下: signed char表示范围:[-128, 128); unsigned char表示范围:[0, 256);

3、struct 在实际问题中,一组数据往往具有不同的数据类型。struct关键字就可以将这些不同数据类型的数据打包成一种构造数据类型。这种构造类型由多个成员组成,每一个成员可以是一个基本数据类型或者另一个构造类型。一般情况下,结构体所占内存大小是其成员所占内存之和。但空结构体的内存大小在不同编译器里有0有1,读者可以试一试。

4、union union关键字用法与struct非常相似,但也有区别。struct中的所有数据成员是共存的,不管有没有调用,编译器都会分配内存;而union中的数据成员是互斥的,它只配置一个足够大的空间来容纳最大长度的数据成员。即union中所有数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有数据成员具有相同起始地址。

5、void void的作用是对函数返回值的限定、对函数参数的限定和声明空类型指针。如果定义函数时不加返回类型限定,则编译器会作为返回整型处理,而不是void, 用void声明的函数表示该函数无返回值;同理,当函数无参数时,可以给无参数函数传送任意类型的参数而不影响程序执行,只有用void指明函数参数时,给无参函数传入参数时编译器才会报错。 另外,不同数据类型的指针必须经过类型强制转换后才能相互赋值,而void指针可以接受来自任意数据类型的指针赋值,但void指针不能在没有强制类型转换下直接赋值给其它类型的指针。

二、控制语句关键字

1、循环语句类型关键字(5个)

序号关键字说明1for遍历循环2do其后紧跟循环体3while条件循环或死循环4break跳出当前循环5continue终止本次循环,开始下次循环

2、条件语句类型关键字(3个)

序号关键字说明6if条件语句7else条件语句否定分支8goto无条件跳转语句

重点说明: goto语句,有人主张禁用,有人主张慎用,个人认为用来跳出多重循环还是可以的。

3、开关语句类型关键字 (3个)

序号关键字说明9switch用于多条件判断语句10case多条件判断语句分支11default开关语句的其它分支

重点说明: switch、case组合语句可以看作为if、else语句的加强版。后者适用于二分支或嵌套较少的分支,前者则在面对多分支情况时有更高的效率。 case语句需要注意的点很多,如: 为了避免多个分支重叠,需要在case结尾加上break; 不要忘了default语句; case语句的排序问题等。

4、返回语句类型关键字(1个)

序号关键字说明12return函数返回语句

重点说明: return用于终止一个函数,并返回其后面跟着的值。

三、存储类型关键字 序号关键字说明1auto声明自动变量2extern声明变量是在其他文件定义3register声明寄存器变量4static声明静态变量

重点说明: 1、auto关键字声明自动变量,由编译器自动分配及释放。这种变量在程序执行时被快速建立,程序退出后被自动撤销,在缺省的情况下,编译器默认所有变量都是auto的。

2、static为声明静态变量,主要有修饰变量和修饰函数的作用。 修饰变量时: 变量又分为局部变量与全局变量,当变量被修饰为静态全局变量时,它的作用域为定义之处开始,到文件结尾处结束,其它文件用extern声明也没办法使用它;当变量在函数体内被static修饰,则该变量只能在这个函数里使用,即使是同一个文件也不行,称为静态局部变量。静态变量总是存储在内存静态区,即使是程序执行完毕它的值也不会被销毁。 修饰函数时: 在函数前面加static可以使函数变为静态函数,静态函数的作用域仅局限于本文件,这样可以避免其它文件中定义的函数重名。 3、extern 关键字置于变量或函数前,表明变量或函数的定义在其它文件中。链接器在遇到此类变量时会在其它模块中解析/捆绑此标识符。 4、register 这个关键字请求 编译器尽可能地将变量存储在cpu的内部寄存器中,而不是通过通过内存寻址来访问变量,这有效地提高了效率。理解这个关键字需要弄那个明白cpu、寄存器与内存之间的关系,cpu是不直接和内存打交道的,cpu与内存之间的数据传输需要经过寄存器,故而将变量存储在寄存器可以提高运行效率。 PS:寄存器其实就是一块一块小的存储空间,只不过其存储数据要比内存快得多。

四、其它关键字 序号关键字说明1const声明只读变量2sizeof计算数据类型长度(字节数)3typedef给数据类型取别名4volatile所修饰的对象不能被编译器优化

重点说明: 1、const修饰只读变量,变量一旦赋初值就不能被修改。编译器不为只读变量分配内存,这使得它的效率也很高。 2、sizeof后面常跟这一对括号,但它绝对不是函数,它可以计算数据类型的大小,单位为字节。 3、typedef的意思是给一个已经存在的数据类型取一个别名,而不是定义新的数据类型。尤其是结构体之类的自定义数据类型,常常需要取一个适用于实际情况的别名。如:

typedef struct Student { int a; }Stu; //这里的Stu实际上就是struct Student的别名

4、volatile是一种类型修饰符,编译器会对它修饰的变量进行特殊地址的稳定访问而不进行代码上的优化。那这里的优化具体指的是什么意思呢?

比如你想要吃苹果,这时你有两种选择,去苹果园(特殊地址)摘和去商店买,商店里的苹果来自苹果园。所谓的优化实际上是一种“偷懒”行为,当你每次吃苹果都只是去商店买而不去苹果园摘,就是一种优化行为。volatile关键字就是要你每次吃苹果时都只能去苹果园摘而不能去商店买,这就是特殊地址的稳定访问。因为商店里的苹果可能是坏的,已经改变的,而苹果园里的苹果一直都是新鲜的,完好的。

回到程序里一想,如果你需要某个变量的值稳定,而它又可能在程序执行过程中移到其它地方(商店)时发生改变,为了防止编译器“偷懒”,故你需要在这个关键字前用volatile修饰。

五、表格汇总

32个关键字如下:

autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile

【参考文献】 [1]《C语言深度解剖(第2版)》,作者:陈正冲



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有