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

简介: 说起 struct 关键字,学过 C 语言的小伙伴应该都有了解,struct 也可以理解成自定义类型,我们知道 C 语言内置类型远远还不够满足我们的需求,假设说我们要录入一个学生的信息,简简单单的 int char 这些是完全不够的

3、enum 是你想的这样吗

3.1 枚举类型的简单使用

enum 是枚举关键字,枚举字面意思上理解就是一一列举,在我们生活中,比如从周一到周日,这是一个集合,也可以一一列举出来,一年有12个月,同理。

枚举的一般的定义方式:

enum Color
{
    RED,
    GREEN,
    BLUE,
    YELLOW,
};

以上就是枚举的一般定义方式,在 { } 中的内容是枚举类型的可能取值,也叫枚举常量

RED,GREEN,BLUE,YELLOW 这些成员都是常量,也就是我们所说的枚举常量(常量一般用大写),这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值:

3.2 #define宏 与 枚举 的区别

我们可以使用 #define 定义常量,为什么非要使用枚举?

枚举的优点:

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. #define 宏常量是在预编译截断进行简单替换,枚举常量则是在编译的时候确定其值。
  4. 防止了命名污染(封装)
  5. 在一般调试器里,可以体调试枚举常量,但不能调试宏常量。
  6. 使用方便,枚举一次可以定义大量相关的常量,而 #define 宏一次只能定义一个。

4、typedef 深入理解

4.1 typedef 的使用

或许有很多人认为 typedef 是定义一个新的类型,如果从字面意思理解的话 type 是数据类型的意思,def(lne) 是定义的意思,这么一看好像真实定义数据类型,不过这种理解是不正确的。

typedef 是给一个已存在的数据类型(不是变量)取一个别名,而非定义一个新的数据类型。我们通常称 typedef 为类型重命名。

那么那一般如何使用呢?

  1. 对一般类型进行重命名
  2. 对结构体类型进行重命名
  3. 对指针进行重命名
  4. 对复杂结构进行重命名

4.2 typedef 跟 #define 的区别

在编程中,每个人都有自己写代码的习惯,我不知道有没有小伙伴喜欢这样定义变量:

int a, b, c;

这种写法我是不推荐的,代码可读性不高,调试起来不方便....

我们来看一个例子:

为什么会出现以上情况呢?因为 * 号先跟 ptr1 结合了,所以 ptr2 用的是 int  类型。

那么这里我们在思考一个问题,如果用 typedef 或者 #define 可以解决这个问题吗?

通过实验我们可以看出,如果是用 tpyedef 是可以解决这个问题的,为什么呢?因为 typedef 是类型重命名,我们把 int* 类型重新给它取了一个名字而已,这个定义的每个变量都是 int* 类型,而 #define 并不一样,他只是简单的宏替换而已!

4.3 typedef 细节上的问题

对于一些编程的初学者来说,如果一些知识点没有了解透彻,在写代码碰到问题却又不明白其中的原理是很苦恼的一件问题,接下来就带小伙伴们看一个细节上使用 typedef 可能会碰到的问题:

如上这串代码显然是不可行的,那么肯定有疑问,为什么不可以呢?

C 中 typedef 不支持这种类型的扩展,不能当成简单的宏替换!但是 #define 可以,因为他只是宏替换。

typedef staict int sint32_t;

如上代码看似是合理的,但是编译都会出错, 因为 typedef 是属于存储关键字,存储关键字,不可以同时出现,也就是说,在一个变量定义的时候,只能有一个。

5、关键字的分类总结

看到这里,相信你们对 C 语言(C89 C90) 所有的关键字都有所理解了,这里最后会给关键字进行分类,方便小伙伴们的理解。

C语言关键字的内容在这里就全部讲完,下期就开始进入到我们深入理解符号的讲解哦!

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

热门文章

最新文章