C语言32个关键字-最详解释

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

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 <stdio.h>
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个关键字如下:

autobreakcasecharconstcontinuedefaultdo
doubleelseenumexternfloatforgotoif
intlongregisterreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoidvolatilewhile

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

  • 46
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种很受欢迎的编程语言,它使用32关键字来控制程序结构和执行过程。这些关键字不同于普通变量名或函数名,具有特殊的语法意义,因此翻译这些关键字非常重要。下面是这些关键字的翻译图: 自动(auto):用于声明自动变量,通常在函数中使用。 双精度(double):用于声明双精度浮点数型变量。 打破(break):用于中断当前循环或switch语句。 案例(case):用于定义switch语句中的分支。 字符(char):用于声明字符型变量。 连续(continue):用于跳过当前循环的余下部分。 默认(default):用于定义switch语句中的默认分支。 执行(do):用于定义do-while循环。 双次(else):用于定义if语句中执行非if分支的情况。 枚举(enum):用于定义枚举类型。 外部(extern):用于声明外部变量或函数。 浮点(float):用于声明浮点型变量。 为(for):用于定义for循环。 去(goto):用于跳转到程序中某个标号。 如果(if):用于定义条件语句。 整型(int):用于声明整型变量。 长(long):用于声明长整型变量。 登陆(signed):用于声明有符号型变量。 长度(sizeof):用于获取数据类型或变量的长度。 静态(static):用于声明静态变量或函数。 结构(struct):用于定义结构体类型。 开关(switch):用于定义多分支情况下的判断语句。 类型定义(typedef):用于定义自定义数据类型。 联合(union):用于定义联合体类型。 未登陆(unsigned):用于声明无符号型变量。 返回(return):用于从函数中返回值。 短(short):用于声明短整型变量。 如(sizeof):用于获取数据类型或变量的长度。 紧缩(volatile):用于标识变量可能会改变,以便编译器不会将其优化。 当(while):用于定义while循环。 以上就是C语言32关键字的翻译图,它们在程序中扮演着非常重要的角色,熟练掌握这些关键字,可以使程序的编写更加简洁、清晰和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值