【C语言】关键字的深入理解(第一期)(上)

简介: 本期内容充分用到实例讲解,会更深层次的讲解本期关键字,可能会让你有意想不到的收获,希望每位小伙伴在读任何技术文章的时候都能抱着一个空杯心态,这样收获比可能比你想得要多!

首先我们来了解C语言一共有多少个关键字呢?

在我们一般书籍的介绍中,一共有32个关键字,这些是基于C90(C89)的标准,但是在后面的C99标准中新增了5个关键字,不过目前主流的编译器其实对C99的支持并不友好,所以暂时可以先不了解。

1、变量的认识

1.1变量的声明和定义

定义变量的本质:在内存中开辟一块空间,用来保存数据。

如何定义变量相信大家都知道了,这个我就不细说了,但是我发现有的学校老师写main函数的时候返回值为void或者直接不写返回值,这样有错吗?其实严格意义上这是不规范的写法的!(C/C++标准规定main 函数的返回值应该定义为 int 类型)如果现在有的书上还是void main我建议你考虑扔掉那本书🤪,那么标准的main函数的写法是什么呢?见代码:

其实这里你 return 1; 或者任何数都没问题包括负数编译器都不会报错,但是,我们C语言从开始到现在以来,已经约定了规矩,如果程序是异常结束则返回非0值,程序正常结束则返回0!就像我们去任何一个地方要尊重当地的习俗一样!

接着我们来理解变量的声明:

这里我给大家简单举一个例子,张三喜欢上了隔壁学院的小美,在某一天晚上张三鼓起勇气跟小美告白,于是小美成为了张三的女朋友,这就叫做定义!那么张三晚上回寝室特别开心,他把这个消息告诉了室友李四,也告诉了隔壁寝室的王五,甚至还打电话告诉了她的妈妈,张三给任何人声明小美就是他女朋友,那么这就叫做声明!

声明可以有多次,代码块内定义只能有一次!(详细内容放在extern讲解)

1.2全局变量和局部变量

变量我们可以分为局部变量和全局变量:

局部变量:包含在代码块中的变量叫局部变量同时局部变量具有临时性,当它进入代码块的时候会自动开辟空间,退出代码块会自动释放。

全局变量:在所有函数外定义的变量叫做全局变量全局变量具有全局性,声明周期从整个进程开始到进程结束。

1.2变量的作用域和生命周期

变量的作用域:指的是该变量的可以被正常访问的代码区域!

变量的生命周期:指的是该变量从定义到被释放的时间范围!

                            *局部变量:进入代码块,形成局部变量到退出代码块

                           *全局变量: 定义完成之后,程序运行的整个生命周期内,该变量一直都有

这里我们先简单了解概念,讲static关键字会带入进去以上概念。

2、跑的飞快 --------- register(理解)

见名知意,为什么叫跑的飞快,让然是非常快!首先我们先来看一幅图:

在我们先认识register这个关键字之前先了解一个概念,计算机中CPU是主要负责进行计算的硬件单元,但是为了运算方面,我们一般要先把数据硬盘读取到内存中,再从内存中读取到CPU内,那么CPU也就需要一定的数据临时存储能力,所以现代的CPU内,都集成了一组叫做寄存器的硬件,用来做临时数据的保存,那么我们如果把变量放在寄存器中,不用通过从内存中读取这个步骤的话是不是会更快呢?

寄存器存在的本质在硬件层面上,提高计算机的运算效率。因为不需要从内存读取数据!

用register修饰变量:尽量将所修饰的变量放到CPU寄存器中,从而达到提高效率的目的!

那么所有变量适合采用register修饰吗?并不是!

  • 局部变量(全局变量会导致CPU寄存器长时间被占用)
  • 不会被写入的(写入就需要写回内存,后续还要读取检测的话,register的意义在哪呢?)
  • 需要高频被读取的(提高效率所在)

建议:如果要使用,请不要大量使用,因为寄存器数量有限!

来到这里我们要注意一个问题,既然被register修饰的变量会被放到CPU寄存器中,那么它还可以进行取地址操作吗???

这里我们win vs编译器的环境下显然是不可以的!

为什么呢?因为地址是内存上的概念。(其他环境未测试)。

最后:这个关键字在目前来看,已经不重要了,主流的编译器已经很智能了,能够进行比人更好的代码优化,我们只需要了解即可。

相关文章
|
3天前
|
存储 程序员 C语言
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
|
7月前
|
存储 编译器 C语言
C语言——关键字详解
C语言——关键字详解
|
7月前
|
C语言
带你熟知关键字static用法——C语言(举例及通俗易懂)
带你熟知关键字static用法——C语言(举例及通俗易懂)
74 0
|
3天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
3天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
3天前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
17 2
|
3天前
|
程序员 C语言
在C语言中,typedef是一种用来创建新的数据类型名的关键字
在C语言中,typedef是一种用来创建新的数据类型名的关键字
10 0
|
3天前
|
存储 编译器 C语言
C语言的关键字
C语言的关键字
16 0
|
3天前
|
存储 编译器 C语言
c语言中的关键字
c语言中的关键字
10 0
|
6月前
|
存储 安全 编译器
13 C++ - const关键字(比较C语言)
13 C++ - const关键字(比较C语言)
44 0