Auc的个人博客

vuePress-theme-reco Auc    2020 - 2021
Auc的个人博客 Auc的个人博客

选择一个主题吧~

  • 暗黑
  • 自动
  • 明亮
主页
分类
  • JavaScript
  • Vue
  • 数据结构与算法
  • 文档
  • 面试题
  • 笔记
标签
笔记
  • CSS
  • ES6
  • JavaScript
  • Vue
  • C语言
文档
  • Vueのapi
  • Vue Router
  • axios
  • Vue CLI
面试
  • JS
  • Vue
  • 基础
时间线
联系我
  • GitHub (opens new window)
author-avatar

Auc

62

文章

11

标签

主页
分类
  • JavaScript
  • Vue
  • 数据结构与算法
  • 文档
  • 面试题
  • 笔记
标签
笔记
  • CSS
  • ES6
  • JavaScript
  • Vue
  • C语言
文档
  • Vueのapi
  • Vue Router
  • axios
  • Vue CLI
面试
  • JS
  • Vue
  • 基础
时间线
联系我
  • GitHub (opens new window)
  • C

    • 写在前面
    • C语言概述
    • 数据类型、运算符与表达式
    • 语句、函数、作用域与数组与字符串
    • 指针
    • 结构体
    • typedef关键字

typedef关键字

vuePress-theme-reco Auc    2020 - 2021

typedef关键字

Auc 2021-03-21 C语言笔记

# typedef关键字

typedef 关键字主要用于自定义数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等

# 几种用法

# 为基本数据类型定义新的类型名

typedef float aFloatValue;
/*如下两个定义变量的方式都可以*/
float float1 = 4.9;
aFloatValue float2 = 9.7;
1
2
3
4

# 为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称

// 原本的结构体
struct Point
{
  double x;
  double y;
  double z;
};
struct Point stu1; // 创建结构体变量

// typedef 后
typedef struct Point
{
  double x;
  double y;
  double z;
}tagPoint;
tagPoint stu2; // 使用结构体直接用自定义的 tagPoint
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

上面使用 typedef 的方法,其实相当于拆分成如下两个部分

struct Point
{
  double x;
  double y;
  double z;
};
typedef struct Point tagPoint
1
2
3
4
5
6
7

加深理解

  1. 看一个报错的案例
typedef struct tagNode
{
  char *pItem;
  pNode pNext; // 错误
} *pNode;
1
2
3
4
5

报错原因是,pNode 表示的是该结构体的新别名。于是问题出现了,在结构体类型本身还没有建立完成的时候,编译器根本就不认识 pNode,因为这个结构体类型的新别名还不存在,所以自然就会报错。

修改

typedef struct tagNode
{
  char *pItem;
  struct tagNode *pNext; // 创建一个结构体变量
} *pNode;
1
2
3
4
5

解释如下

当然,也可以先定义 *pNode 再使用

typedef struct tagNode *pNode;
strcut tagNode
{
  char *pItem;
  pNode pNext;
}
1
2
3
4
5
6

# 其他用法

数组、指针都可以使用 typedef, 这里不再赘述。