引入
我们知道,数据的类型可以是系统自带的int float char double等类型,也可以是我们自己声明的结构体、共用体、枚举类型等。其实,我们还可以用 typedef 指定新的类型名代替已有的类型名。
替换原有类型
我们用一个新的类型名,替换原有的类型名
typedef int integer;
//指定使用 integer 为类型名,代替 int 使用
typedef float Real;
//是定使用 Real 为类型名,代替 faloat 使用
声明之后,那么下面的内容等价:
typedef int Bliner;
Bliner a,b;
//上面的内容等价于
int a,b;
方便在自己的程序中使用和方便其他人查看和维护。
替换复杂类型
我们知道,结构体、共用体等类型复杂,我们能否使用一个简单的类型名来代替呢?答案是可以的。
替换结构体类型
typedef struct {
int num;
float score;
struct Student *next;
}Bliner;
我们声明了一个结构体,然后新的类型名是 Bliner
我们可以理解为,这种形式
typedef + 类型(名字、结构体或其他)+新名字
替换数组类型
typedef int Num [100]; //定义 Num 为整型数组类型
Num a; //定义了 a 为一个整型数组变量,包含100个元素
替换指针类型
typedef char * Bliner;
//Bliner 为一个字符指针类型
Bliner p,s[10];
//p 为字符指针,s 为包含10个字符指针的数组
替换指向函数的指针
typedef int (*Bliner)();
// 声明 Bliner 为指向函数的指针类型,返回值是整型
Bliner p1,p2;
// p1 和 p2 都是Bliner 类型的指针变量
归纳写法
- 先按照定义变量的方式写出定义体(如:int i;)
- 将变量名换成新类型名(例如把 i 换乘 Bliner)
- 在最前面加 typedef (typedef int Bliner)
- 然后可以使用新类型名去定义变量
用指向函数的指针来举例
//第一步,默认写法
int (*fun)();
//第二步,替换名字
int (*Bliner)();
//第三步,加上 typedef
typedef int (*Bliner)();
原理
其实就是同义词,我们告诉编译器,把新名字作为旧名字的同义词去使用,系统自动生成了一个新名字的变量类型。
但是,#define 和 typedef 是有区别的,#define 是替换,typedef 则是同义词。
所以,typedef 后,新旧名字都可以使用。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。
评论