【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语言关键字的内容在这里就全部讲完,下期就开始进入到我们深入理解符号的讲解哦!

相关文章
|
5月前
|
存储 程序员 C语言
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
|
3月前
|
C语言
|
3月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
4月前
|
存储 C语言
C语言中的typedef关键字:为类型定义新名称
C语言中的typedef关键字:为类型定义新名称
|
4月前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
|
4月前
|
存储 编译器 C语言
C语言中的关键字与标识符详解
C语言中的关键字与标识符详解
|
5月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
5月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
40 2
|
5月前
|
存储 C语言
【C语言】数据:数据类型关键字
【C语言】数据:数据类型关键字
|
5月前
|
存储 编译器 C语言
c语言中static关键字的作用
c语言中static关键字的作用