我们在结构体,数据结构里面都会见到typedef,那它是干嘛的。
typedef:类型定义。(#define 宏定义)
我们之前是通过类型来定义变量,但其实还可以定义一个类型。
typedef有两个应用场景。
1.给一个长的类型名起一个短的新名字。也可以说是别名,但其指的是同一个东西。就是给原本的类型起一个新的名字。(typedef+旧的类型+新的别名)(typedef+旧的结构体{};+新的别名)
但这个在C++里面已经不用了,C++里面有一个更优秀的关键字:auto。当你类型写不出来了,你就让auto猜,它就猜出来了。
所以每次定义结构体的时候都会在前面加一个typedef。就是为了以后再去使用这个结构体的时候可以写简单的短名字,也就是省心。
下面来理解一下,例如这句typedef unsigned long long int uint64;,当我们把前面的typedef删掉时,就成了 unsigned long long int uint64;,这是什么意思,我们定义了一个无符号长长整型的变量 uint64, typedef是用来干嘛的,它用来定义类型,把刚刚的变量提升成为它刚才的数据类型。 关键字的作用是用来定义类型而非定义变量的,所以没有它就是一个无符号长长整型的变量,加上它就是无符号长长整型的数据类型。
所以typedef int* Pint;,没有typedef就是整型指针变量Pint,加上它就是整型指针数据类型Pint,
Pint等同于int *。
typedef int Arr[10];,没有typedef就是一个整型数组变量Arr,加上它就是整型数组类型Arr。那么以后Arr定义的变量就会是一个长度为10的整型数组。
所以(类型名+变量名)是通过一个类型定义变量,(typedef+类型名+变量名)是变量名就提升成这种数据类型了,以后(变量名+变量)定义出来的变量就是上面一整个(类型名+变量名)了。但这个不常用。
所以typedef对于很复杂的数据类型时显得优雅好看好用。比如函数值。
2.给类型起个更贴合问题的新名字。(类似于根据一个人的特征起个外号)。它跟具体的类型有关系,最典型的是时间,(time_t)。还有数量(size_t),一般统计有几个人,多少岁等等,这种非负的数字。
转两回定义我们可以看到time_t其实是一个64位的整数。typedef把一个64位数字换成了时间time_t。那么以后在时间领域去处理问题的时候它返回的时间值其实就是个数字。
例如