【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编译器的环境下显然是不可以的!

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

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

相关文章
|
22天前
|
存储 数据可视化 编译器
【C语言】union 关键字详解
联合体(`union`)是一种强大的数据结构,在C语言中具有广泛的应用。通过共享内存位置,联合体可以在不同时间存储不同类型的数据,从而节省内存。在嵌入式系统、硬件编程和协议解析等领域,联合体的使用尤为常见。理解和正确使用联合体可以使代码更加高效和灵活,特别是在内存受限的系统中。
58 3
【C语言】union 关键字详解
|
23天前
|
编译器 C语言
【C语言】extern 关键字详解
`extern` 关键字在C语言中用于跨文件共享变量和函数的声明。它允许你在一个文件中声明变量或函数,而在其他文件中定义和使用它们。理解 `extern` 的使用可以帮助你组织和管理大型项目的代码。
64 3
|
22天前
|
C语言
【C语言】break 关键字详解
- `break` 关键字用于提前退出循环体或 `switch` 语句的执行。 - 在 `for`、`while` 和 `do-while` 循环中,`break` 可以帮助程序在满足特定条件时退出循环。 - 在 `switch` 语句中,`break` 用于终止 `case` 代码块的执行,避免代码“穿透”到下一个 `case`。 - 注意 `break` 只会退出最内层的循环或 `switch` 语句,确保在嵌套结构中正确使用 `break` 以避免意外的控制流行为。
73 2
|
22天前
|
传感器 安全 编译器
【C语言】enum 关键字详解
`enum`关键字在C语言中提供了一种简洁而高效的方法来定义一组相关的常量。通过使用枚举,可以提高代码的可读性、可维护性,并减少错误的发生。在实际应用中,枚举广泛用于表示状态、命令、错误码等,为开发者提供了更清晰的代码结构和更方便的调试手段。通过合理使用枚举,可以编写出更高质量、更易维护的C语言程序。
101 2
|
22天前
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
56 2
|
22天前
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
41 1
|
22天前
|
C语言
【C语言】continue 关键字详解
`continue` 关键字在 C 语言中用于跳过当前循环中的剩余代码,并立即开始下一次迭代。它主要用于控制循环中的流程,使程序在满足特定条件时跳过某些代码。
54 1
【C语言】continue 关键字详解
|
22天前
|
存储 C语言
【C语言】static 关键字详解
`static` 关键字在C语言中用于控制变量和函数的作用域和生命周期。它可以用于局部变量、全局变量和函数,具有不同的效果。理解 `static` 关键字的用法有助于封装和管理代码,提高代码的可维护性和可靠性。
36 3
|
22天前
|
C语言
【C语言】return 关键字详解 -《回家的诱惑 ! 》
`return` 关键字在 C 语言中用于终止函数的执行,并将控制权返回给调用者。根据函数的类型,`return` 还可以返回一个值。它是函数控制流中的重要组成部分。
54 2
|
22天前
|
C语言
【C语言】sizeof 关键字详解
`sizeof` 关键字在C语言中用于计算数据类型或变量在内存中占用的字节数。它是一个编译时操作符,对性能没有影响。`sizeof` 可以用于基本数据类型、数组、结构体、指针等,了解和正确使用 `sizeof` 对于内存管理和调试程序非常重要。
47 2