C语言中的32个关键字
关键字 | 作用 |
char | 声明字符型变量 |
short | 声明短整型变量 |
int | 声明整型变量 |
long | 声明长整型变量 |
float | 声明浮点型变量 |
double | 声明双精度变量 |
signed | 声明有符号类型变量 |
unsigned | 声明无符号类型变量 |
struct | 声明结构体变量 |
union | 声明联合数据类型 |
enum | 声明枚举类型 |
auto | 声明自动变量,缺省时编译器一般默认为auto |
static | 声明静态变量 |
extern | 声明变量在其他文件中声明,引用变量 |
register | 声明寄存器变量 |
const | 声明只读变量 |
void | 声明函数无返回值或无参数,声明空类型指针 |
sizeof | 计算对象所占的内存空间大小 |
typedef | 给数据类型取别名 |
if | 条件语句 |
else | 条件语句的否认分支,与if联用 |
for | 一般循环语句 |
while | 循环语句的循环条件 |
do | 循环语句的循环体 |
goto | 无条件跳转语句 |
break | 跳出当前循环 |
continue | 结束此次循环,进入下一轮循环 |
return | 子程序返回语句,参数可带可不带 |
switch | 用于条件判断语句可以有多种条件 |
case | 条件分支 |
default | switch语句的最终分支 |
volatile | 说明程序在执行中可被隐含的改变 |
针对关键的功能作用可以分为以下四种类型:
第一类:定义变量类型:void、char、short、int、long、float、double、signed、unsigned;
第二类:构造类型:struct、union、enum、typedef;
第三类:存储与生命周期:auto、static、extern、register、const、volatile;
第四类:语句相关:if、else、for、while、do、switch、case、fault、goto、break、continue、return;
(sizeof() 是一个判断数据类型或者表达式长度的运算符)
static
说明:声明静态变量。
作用:
1)修饰变量:static可以修饰局部变量和全局变量,它们都存放在内部的静态区中。
A、静态全局变量:使得其作用域仅限于变量被定义的文件中,其它文件不论通过什么方式都不能访问。
B、静态局部变量:在某个函数体里面定义的静态局部变量,只能在本函数体被访问,即使同一个文件的其它函数也访问不了。 静态局部变量总存储在静态数据区,所以即使这个函数运行结束,这个静态局部变量的值不会被销毁,函数下次使用时仍然可以用到这个值,知道程序结束才释放。
2)修饰函数:用来修饰不能被其它文件访问的一个函数
例1、
#include<stdio.h>
static int i=0;
static int q=0;
int func1()
{
i=0;
i++;
return i;
}
int func2()
{
q++;
return q;
}
int func3()
{
static int j = 0;
j++;
return j;
}
int func4(){
int p = 0;
p++;
return p;
}
int main()
{
int k = 0;
for (k = 0; k < 10; k++)
{
printf("func1:%d func2:%d func3:%d func4:%d\n",func1(),func2(),func3(),func4());
}
return 0;
}
运行结果:
对比func1和func2的运行结果:两者分别对静态全局变量i和q进行自增操作;但是func1中每次都对i赋值为0;func2中并无赋值操作q为全局静态变量所以每次的值都在自增;
对比func3和func4的运行结果:func3使用对局部静态变量j进行自增操作,func4对局部变量p进行自增操作;func3虽然调用10次,但是“static int j = 0”语句只被执行了一次,所以j等于10;func4每次执行完毕p对应内存中的值就被释放所以每次0自增后为1.
signed、unsigned
signed修饰的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。所以对于signed的整数,的存储范围是(-2^15 to 2^15-1),也就是 -32768 到 +32767的整数。
unsigned修饰的整数,其16位全部用来编码,存储范围便是(0 to 2^16-1),即 0到 65535 的非负整数。所以呢 你可以声明 int a = 1,或者 int a = -1, 但是不可以声明 unsigned a = -1 。但是需要提到的一点是,不管整数的类型是signed 还是 unsigned,都用了16位来存储,也就是说16位全部用来存储数据
Register
说明:这个关键字请求编译器尽可能的将变量存放在CPU内部的寄存器中,而不是通过内存寻址访问以提高效率。
register修饰变量必须是一个单个的值,并且其长度必须小于或等于整形的长度。
register修饰变量可能不存在内存中,所以不能用取地址运算符“&”来获取register变量的地址。
Volatile
只要变量可能被意外的修改,就需要把该变量声明为volatile。在实际应用中,只有三种类型数据可能被修改:
1.外设寄存器地址映射;
2.在中断服务程序中修改全局变量;
3.在多线程、多任务应用中,全局变量被多个任务读写。