11. 常见关键字
C 语言标准中规定了32个关键字,而在之后C99的标准下又增加了五个关键字,anduin这次对大家进行归纳的是C标准中的32个关键字,我们根据其特性,可以把它分为几类:
数据类型关键字(12个)
char:声明字符型变量或函数
short:声明短整型或函数
Int :声明整型变量或函数
long :声明长整型变量或函数
signed:声明有符号类型变量或函数
unsigned:声明无符号整形变量或函数
foat:声明浮点型变量或函数
double:声明双精度变量或函数
struct:声明结构体变量或函数
union:声明共用体(联合)数据类型
enum:声明枚举类型
void:声明函数无返回值或无参数,声明无类型指针
控制语句关键字(12个)
1.循环控制(5个)
- for:一种循环语句
- do:循环语句的循环体
- while :循环语句的循环条件
- break:跳出当前循环
- continue:结束当前循环,开始下一轮循环
2.条件语句(3个)
- if:条件语句
- else:条件语句否定分支
- goto:无条件跳转语句
3.开关语句(3个)
- switch:用于开关语句
- case:开关语句分支
- default:开关语句中的"其他"分支
4.返回语句(1个)
- return:函数返回语句(可以带参数,也可以不带参数)
5.存储类型关键字(5个)
- auto:声明自动变量,一般不使用
- extern:声明变量实在其他文件中声明
- register:声明寄存器变量
- static:声明静态变量
- typedef:用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)
注意:存储关键字,不可以同时出现,也就是说,在一个变量定义的时候,只能有一个。
6.其它关键字(3个)
- const:声明只读变量
- sizeof:计算数据类型长度
- volatile:说明变量在程序执行中可被隐含地改变
这里anduin带大家有选择性的,讲解几个关键字,若没有讲到日后我们一一讲解:
auto
auto 从字面意思来看就是自动的意思 它也被成为自动变量
局部变量都是自动创建,自动销毁的,所以局部变量都是auto修饰的。
int main() { auto int a = 10;//局部变量都是auto类型的,因此auto基本会被省略 return 0; }
typedef
本质
本质:类型重命名
使用方法
#include<stdio.h> typedef unsignde int u_int; int main() { u_int x = 0; return 0; }
分析:当我们在写代码时,一些代码类型很长,例如无符号整型unsigned int或者结构体,指针等,这时我们就可以用typedef对它进行类型重命名,本段代码中就是用了typedef来重命名unsigned int为u_int。
作用
对类型重命名的一种解决方案,让我们在面临冗长的类型命名方面上更加简便,可以对一些不太好理解的数据类型进行简化。
register
我们先想想,数据在计算机上可以存放在哪里呢?
1.内存
2.硬盘
3.高速缓存
4.寄存器
存储金字塔
寄存器存在的本质
从硬件层面上,提高计算机的运算效率。当读取数据时,计算器先去寄存器中读取,如果没有读取到,再去高速缓存区中读取,最后才是内存,而且在cpu再读取寄存器中的数据时,内存->高数缓存区(cache),cache->寄存器,这个数据传递过程会持续进行,大大提高效率!
register 修饰变量
也就是相同的原理,尽量把所修饰变量,放入CPU寄存区中,从而达到提高效率的目的。
#include<stdio.h> int main() { register int a = 10; return 0; }
register 修饰什么变量
register可不是什么变量都适合修饰的,要知道寄存器的价格是很昂贵的,register所修饰的变量也得"精挑细选"一番。
- 局部变量(全局变量由于其特性会导致CPU寄存器被长时间占用)
- 不会被写入的(写入就需要写回内存,register本身就是快速读取,后续还要读取检测的话,就与原目的背道而驰了)
- 高频被读取的变量(俗话说把钱用在刀刃上,存入了寄存器,当然要经常使用的)
- 如果要使用,不要大量使用,寄存器的数量是有限的!
小科普
register修饰的变量,不能取地址!!!
#include<stdio.h> int main() { register int a = 0; printf("&a = %p\n", &a); return 0; }
编译运行:
分析:因为register的作用,变量a已经被放入寄存器中了,你怎么取地址呢?
结语
以上就是初识C语言中篇的内容,虽然只有两个专题,但是内容其实也是很多的,希望我的文章对你有帮助,如果大家觉得anduin写的还可以的话,请点赞+收藏哦!你们的肯定就是对我最大的鼓励!