前言: 学习C语言过程中会遇到许多的关键字,详细了解这些关键字的使用方法和使用场景就显得很必要了;下面来详解C语言中的32个关键字。
一、关键字概述
(1)数据类型关键字
char 声明字符型变量或函数
short 声明短整型变量或函数
int 声明整型变量或函数
long 声明长整型变量或函数
Signed 声明有符号类型变量或函数
unsigned 声明无符号类型变量或函数
float 声明浮点型变量或函数
double 声明双精度变量或函数
struct 声明结构体变量或函数
union 声明共用体(联合)数据类型
enum 声明枚举类型
void 声明函数无返回值或无参数,声明无类型指针
(2)控制语句关键字
[1]循环控制
for 一种循环语句
do 循环语句的循环体
while 循环语句的循环条件
break 跳出当前循环
continue 结束当前循环,开始下一轮循环
[2]条件语句
if 条件语句
else 条件语句否定分支
goto 无条件跳转语句
[3]开关语句
switch 用于开关语句
case 开关语句分支
default 开关语句中的其他分支
[4]返回语句
return 函数返回语句(可以带参数,也可以不带参数)
(3)存储类型关键字
auto 声明自动变量,一般不使用
extern 声明变量是在其他文件中声明
register 声明寄存器变量
static 声明静态变量
const 声明只读变量,不可以写入
(4)其他关键字
volatile 说明变量在程序执行中可被隐含地改变
typedef 用以给数据类型取别名
sizeof 计算数据类型长度
二、数据类型关键字
[1]数据类型取值范围表
<1>有符号整数类型取值范围及占用内存字节数
类型名称 | 占用内存字节数 | 取值范围 |
char | 1 | -2^7(-128) ~ 2^7-1(127) |
short int 或 short | 2 | -2^15(-32 768) ~ 2^15-1(32 767) |
int | 4 | -2^31(-2 147 483 648) ~ 2^31-1(2 147 483 647) |
long int 或 long | 4 | -2^31(-2 147 483 648) ~ 2^31-1(2 147 483 647) |
long long int 或 long long | 8 | -2^63(-9.2233720368548e+18) ~ 2^63-1(9.2233720368548e+18) |
<2>无符号整数类型取值范围及占用内存字节数
类型名称 | 占用内存字节数 | 取值范围 |
unsigned char | 1 | 0 ~ 2^8-1(255) |
unsigned short int 或 unsigned short | 2 | 0 ~ 2^16-1(65 535) |
unsigned int | 4 | 0 ~ 2^32-1(4 294 967 295) |
unsigned long int 或 unsigned long | 4 | 0 ~ 2^32-1(4 294 967 295) |
unsigned long long int 或 unsigned long long | 8 | 0 ~ 2^64-1(1.844674407371e+19) |
<3>浮点类型取值范围及占用内存字节数
类型名称 | 占用内存字节数 | 取值范围 |
float | 4 | -/+3.4e38(精确到6位小数) |
double | 8 | -/+1.7e308(精确到15位小数) |
long double | 12 | -/+1.19e4932(精确到18位小数) |
根据实际的功能需求来取所需的数据类型可以最大限度的的使用内存空间及节省内存占用。
[2]char关键字解析
char是表示字符类型的关键字,用于声明单个字符或字符数组。
例如:
声明一个字符变量c,初始值为字符'A'
char a = 'A';
声明一个字符数组str,初始值为字符串
char str[] = "Hello, world!";
声明一个字符指针*str,初始值为字符串
char *str = "Hello, world!";
[3]short关键字解析
short 关键字用于声明短整数类型变量,通常用于需要限制变量范围时。
例如:
声明一个短整数类型变量 d,初始值为 12
short d = 12;
[4]int关键字解析
int是表示整数类型的关键字,用于声明整型变量或数组。
例如:
声明一个整型变量x,初始值为1
int x = 1;
声明一个包含3个整数的数组arr,初始值为1,2,3
int arr[3] = {1, 2, 3};
[5]long关键字解析
long 关键字用于声明长整数类型变量,可以存储更大范围的整数。
例如:
声明一个长整数类型变量 pl,初始值为 1000000
long pl = 1000000L;
[6]signed关键字解析
signed 关键字用于声明有符号整数类型变量,可以存储正数、负数或零。
例如:
声明一个有符号整数类型变量 a,初始值为负数 -8
signed int a = -8;
声明一个有符号整数类型变量 a,初始值为正数 8
signed int a = 8;
[7]unsigned关键字解析
unsigned 关键字用于声明无符号整数类型变量,只能存储非负整数。
例如:
声明一个无符号整数类型变量 a,初始值为 10
unsigned int a= 10;
[8]float关键字解析
float是表示浮点数类型的关键字,用于声明单精度浮点型变量或数组。
例如:
声明一个单精度浮点型变量f,初始值为6.28f
float f = 6.28f;
声明一个包含3个单精度浮点数的数组arr,初始值为1.1f, 2.2f, 3.3f
float arr[3] = {1.1f, 2.2f, 3.3f};
[9]double关键字解析
double是表示双精度浮点数类型的关键字,用于声明双精度浮点型变量或数组。例如:
声明一个双精度浮点型变量d,初始值为6.28563478
double d = 6.28563478
声明一个包含3个双精度浮点数的数组arr,初始值为1.1,2.2,3.3
double arr[3] = {1.1, 2.2,3.3};
[10]struct关键字解析
struct是一种用于定义结构体类型,即由多个不同数据类型的变量组成的复合数据类型,一块内存的复合数据类型。
例如:
声明一个Person类型的结构体变量pr,初始值为{"Liming", 18}
struct Person {
char name[20];
int age;
};
struct Person pr = {"Liming", 18};
[11]union关键字解析
union是一种用于定义联合类型,即由多个不同数据类型的变量共享同一块内存的复合数据类型。
例如:
union Data {
int i;
float f;
char str[20];
};
union Data data;
data.i = 20;
printf("%d\n", data.i);
data.f = 6.18f;
printf("%f\n", data.f);
strcpy(data.str, "Hello world");
printf("%s\n", data.str);
输出结果为:20
6.18
Hello world
[12]enum关键字解析
enum是一种用于定义枚举类型,即由一组常量组成的数据类型。
例如:
声明一个Color类型的枚举变量as,初始值为RED
enum Color {
RED,
GREEN,
BLUE
};
enum Color as = RED;
[13]void关键字解析
void是一个特殊的数据类型,表示无类型或无返回值,通常用于函数声明中表示函数没有返回值。
例如:
声明一个无返回值的函数PRO
void PRO(void){
printf("Hello, world!\n");
}
三、控制语句关键字
(1)循环控制
[1]for关键字解析
for是用于循环语句的关键字,用于指定循环的起始值、终止值和步长。
例如:
从0到11,每次增加1,重复执行下面的代码块
int i=0;
for (int i = 0; i < 12; i++) {
printf("%d\n", i);
}
[2]do-while关键字解析
do是与while配合使用的关键字,用于先执行一次代码块,然后在条件成立时重复执行。
例如:
先执行一次下面的代码块,然后只要i小于12就一直重复执行
int i = 0;
do {
printf("%d\n ", i);
i++;
} while (i < 12);
[3]break关键字解析
break是用于跳出循环语句的关键字,用于在循环内部提前终止循环,跳出当前循环。
例如:
for (int i = 0; i < 12; i++) {
if (i == 6) {
break;
}
printf("%d\n ", i);
}
[4]continue关键字解析
continue是用于跳过循环中的当前迭代的关键字,用于在循环内部跳过当前循环以下的步骤继续循环。
例如:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
printf("%d ", i);}
(2)条件语句
[1]if关键字解析
if是用于条件语句的关键字,条件为真执行以下的代码块,条件为假则不执行。
例如:
int i = 1;
if (x > 0) printf("welcome!\n");
[2]else关键字解析
else是与if配合使用的关键字,用于在if条件不成立时执行else以下的代码块,否则不执行。
例如:
int i = 1;
if (x > 0) printf("welcome!\n");
else printf("default!\n");
[3]goto关键字解析
goto 是分支语句关键字,用于无条件地跳转到程序的另一个位置,谨慎使用,太多跳转会造成程序的复杂度增强。
例如:
int i = 0;
start:
printf("%d\n", i);
i++;
if(i<20){
goto start;
}
(3)开关语句
[1]switch-case-default关键字解析
switch是用于多分支选择,根据表达式的值跳转到不同的分支执行相应的代码块;case是与switch配合使用,用于指定每个分支的值;default是与switch配合使用,用于指定当没有匹配的case分支时要执行的代码块;三者是相互搭配使用的。
例如:
int num = 0;
switch (num) {
case 1:
printf("You chose num 1.\n");
break;
case 2:
printf("You chose num 2.\n");
break;
case 3:
printf("You chose num 3.\n");
break;
default: printf("Invalid num.\n");
break;
}
(4)返回语句
[1]return关键字解析
return是用于函数中返回值的关键字,用于将某个值作为函数的返回值。
例如:
int add(int a, int b) {
return a+ b;
}
四、存储类型关键字
[1]auto关键字解析
auto是一种存储类关键字,用于在函数内部声明自动变量,即存储在函数栈中的变量。如果没有指定存储类别,则默认为auto。
例如:
auto int i = 1;
printf("%d\n", i);
[2]register关键字解析
register是一种存储类关键字,用于声明寄存器变量,即将变量存储在CPU的寄存器中,以便加快访问速度。对于大多数编译器,register关键字已经不再有太大的作用,编译器会自动进行寄存器优化。
例如:
register int i = 100;
printf("%d\n",i);
[3]extern关键字解析
extern是一种存储类关键字,用于在一个文件中声明另一个文件中定义的变量或函数,以便使它们在其他文件中可用。
例如:
在 PRO.c文件中声明x变量
int Bx;
在 PRO.h文件中声明全局变量x
extern int Bx;
在abs的头文件中包含PRO.h文件即可在abs.c文件中调用
void abs(void) {
Bx = 100;
}
[4]static关键字解析
static是一种存储类关键字,用于在函数内部声明静态变量,只能使用在声明的文件中,其他文件不能调用;静态变量存储在全局数据区或程序栈中,取决于它们的作用域和存储类型。
例如:
声明变量i为函数abs的静态局部变量,其他函数不能调用。
void abs(void) {
static int i = 0; i++;
printf("%d\n", i);
}
声明变量i为函数abs的静态全局变量,本文件的函数可以调用,其他文件不可以调用。
static int i = 0;
void abs(void) {
i++;
printf("%d\n", i);
}
[5]const关键字解析
const用于声明常量,即值不可更改的变量,只可读取,存储在ROM内。
例如:
const int i = 100; (i的值不可以更改)
五、其他关键字
[1]volatile关键字解析
volatile是一种关键字,用于告诉编译器,变量的值可能在外部被修改,因此不能进行某些优化。
例如:
olatile int i = 20;
[2]typedef关键字解析
typedef用于创建自定义数据类型的别名,使别名成为真正的类型,增加可读性和代码维护性。
例如:
typedef int u16;
u16 i = 20;
[3]sizeof关键字解析
sizeof用于返回数据类型或变量的大小,以字节为单位。
例如:
int arr[3] = {1, 2, 3};
int wordnum= sizeof(arr);