C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)

雄关漫道真如铁,而今迈步从头越
老铁们,我们上一篇文章把操作符给说了一下,今天就开始关键字的介绍吧!绝对齐全,包你满意哦!

第五篇

  • 一、初步认识32个关键字
    • 1、数据类型关键字
    • 2、程序语句关键字
    • 3、存储类型关键字
    • 4、其他关键字
  • 二、部分关键字的使用演示
    • 1、auto
    • 2、enum
    • 3、goto
    • 4、register
    • 5、union
    • 6、volatile
    • 7、typedef
    • 8、static
      • 8.1、修饰局部变量
      • 8.2、修饰全局变量
      • 8.3、修饰函数
    • 9、extern
    • 10、const
  • 三、define的使用,定义常量和宏

关键字,是C语言本身提供给我们的,是我们不能创建的,常见的关键字有32个,我们来看一看:

一、初步认识32个关键字

1、数据类型关键字(12个)
2、控制语句关键字(12个)
3、存储类型关键字(4个)
4、其它关键字(4个)

1、数据类型关键字

关键字 解释
char 声明字符型变量或函数返回值类型
double 声明双精度浮点型变量或函数返回值类型
float 声明浮点型变量或函数返回值类型
int 声明整型变量或函数
long 声明长整型变量或函数返回值类型
short 声明短整型变量或函数
signed 声明有符号类型变量或函数
unsigned 声明无符号类型变量或函数
struct 声明结构体类型
union 声明共用体类型
enum 声明枚举类型
void 声明函数无返回值或无参数,声明无类型指针

2、程序语句关键字

关键字 解释
for 一种循环语句
do 循环语句的循环体
while 循环语句的循环条件
break 跳出当前循环
continue 结束当前循环,开始下一轮循环
if 条件语句
else 条件语句否定分支(与 if 连用)
goto 无条件跳转语句
switch 用于开关语句
case 开关语句分支
default 开关语句中的“默认”分支
return 子程序返回语句(可以带参数,也可不带参数)

3、存储类型关键字

关键字 解释
auto 声明自动变量
static 声明静态变量
extern 声明变量或函数是在其它文件或本文件的其他位置定义
register 声明寄存器变量

4、其他关键字

关键字 解释
const 声明只读变量
sizeof 计算数据类型或变量长度(即所占字节数)
typedef 用以给数据类型取别名
volatile 说明变量在程序执行中可被隐含地改变

二、部分关键字的使用演示

由于很多关键字我们都经常使用,所以这里演示一些可能出现频率没那么大的关键字:

1、auto

int main()
{
	{
		auto int a = 10;
	}
	printf("%d\n", a);
	return 0;
}

auto大部分情况下都是被省略掉的。因为我们创建的变量本身就是自动变量,有自己的生命周期和工作区域。

2、enum

enum枚举关键字,读者可以看一看我写的C语言初阶第一篇的篇尾,链接在这里:
C语言初阶第一篇

3、goto

goto语句允许把控制无条件转移到同一函数内的被标记的语句。我们现在基本上已经不使用这个语句了。在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。

4、register

register,声明寄存器变量,这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。如果要了解它的真正作用,我们首先还得理解一下电脑的内存的问题:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第1张图片那么寄存器,就是最上面的那个了,寄存器是集成到CPU上的,并不是那么容易就能被访问,所以只能是建议程序使用,而不能强制。所以,这段代码现在应该就理解了:

int main()
{
	register int num = 10;//建议将num放到寄存器中
	printf("%d\n", num);
	return 0;
}//寄存器的使用一般用在非常高频访问的变量身上

5、union

union,声明共用体类型,这个关键字,就是声明一个变量,至于这个变量能干什么,我们需要学习了结构体的对齐才能有所了解,今天只简单的说一说:

//联合(共用体)
union Un
{
	char c;
	int i;
};//联合的大小至少是最大成员的大小
//当最大成员不是最大对齐数的整数倍时,就要对齐到整数倍

可能又有读者要问,那这个“对齐数”是啥?那么这里给出一个详细的解释链接:
结构体、结构体传参与其内存对齐、位段

6、volatile

volatile,说明变量在程序执行中可被隐含地改变,网上的搜索结果如下:
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,告诉编译器对该变量不做优化,都会直接从变量内存地址中读取数据,从而可以提供对特殊地址的稳定访问。有兴趣的小伙伴可以去看看:
C语言丨深入理解volatile关键字
我们平常基本使用不到这个关键字。

7、typedef

typedef,这个关键字我们一般用来给结构体起别名:

typedef struct StuInfo
{
	//每个学生的个人信息包括:姓名、学号、籍贯、年龄、数学、英语、物理成绩
	char name[15];
	char address[20];
	char ID[15];
	int age;
	int score[3];
	int sum;
	int order;
}StuInfo;

当然,也可以用来更改数据类型的名字:

#include
typedef int ElemDataType;
int main()
{
	ElemDataType a = 10;	
	printf("%d\n", a);
	return 0;
}

8、static

static,是用来修饰变量和函数的:
1、修饰局部变量,称为静态局部变量;
2、修饰全局变量,称为静态全局变量;
3、修饰函数,称为静态函数
我们先看两个代码的区别:

8.1、修饰局部变量

这个代码的运行结果是6 6 6 6 6 6 6 6 6 6

#include
void test()
{
	int a = 5;
	a++;
	printf("%d ", a);
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

而下面这个代码的结果是:6 7 8 9 10 11 12 13 14 15

#include
void test()
{
	static int a = 5;
	a++;
	printf("%d ", a);
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

没错,就是static,让局部变量变成了静态的局部变量,超出了局部的范围也不会销毁,会保留数据,下一次函数调用时依然存在。
static修饰的局部变量是存储在静态区的,有兴趣的小伙伴可以自行了解一下静态区、堆区、栈区的区别

但是,static也不是随便用的,一个全局变量本来是具有外部链接属性的,但一旦被static修饰,外部链接属性就变成了内部链接属性,则只能在自己的源文件里使用,而不能在其他的文件内部使用:

8.2、修饰全局变量

例如,我们在script.c的源文件里声明一个静态全局变量 globalval,然后在test.c里尝试使用:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第2张图片
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第3张图片
就会报错。

8.3、修饰函数

那么这个其实跟上面的修饰全局变量是非常相像的,函数本来是具有外部链接属性的,全局的函数加上static之后,就失去了外部链接的属性。就会在使用中报错:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第4张图片
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第5张图片
不加static是可以使用的:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第6张图片

9、extern

extern是用来声明外部符号的,给个例子就理解了:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第7张图片
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第8张图片
这样的代码时报错的,那么怎么更改?很简单,使用extern来声明外部符号:
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第9张图片
这样就可以了。

10、const

const关键字,多见于函数的传参过程,因为传地址的效率更高一点,但是传地址会有一个缺点,就是又可能导致无意间修改了数据(因为给出地址是危险的行为)。所以const修饰之后,就会让使用安全很多。
不过const修饰的变量是一个常变量,详细的解释看笔者的这一篇文章:
从C语言发展历程到变量常量
C语言初阶第五篇:讲一讲关键字,注意,define不是关键字哦 史上最全C语言关键字介绍(32个关键字全解析)_第10张图片
点击这里,即可查看。

其他的关键字,基本大家都熟悉,就不多解释了。

三、define的使用,定义常量和宏

define应该是最容易被误认为是关键字的了,define并不是关键字,今天我们就顺便提一提define的使用吧!

define定义常量,我们见的都很多,其实没什么可说的,就给一个使用的案例代码吧:

#include
#define PI 3.14
int main()
{
	int r = 10;
	double area = 0;
	area = (double)r * r * PI;
	printf("%.2lf\n", area);
	return 0;
}

关于定义宏,一般考试的实话可能会加以考察,我们只需要记住一句话:
define只替换、不计算。

#include
#define Cau(a,b)  a + b
int main()
{
	int a = 10;
	int b = 20;
	int ret = 0;
	ret = 2 * Cau(a, b);
	printf("%d\n", ret);
	return 0;
}

这个代码的结果是多少呢?结果是 40,为什么?因为define只替换,不计算,我们换一下看看:
2 * 10 + 20 = 40,40就是结果。

那么今天的分享就到这里了,希望本文对你有所帮助,老铁们我们下次再见。

你可能感兴趣的:(C语言基础,c语言,开发语言,后端,经验分享)