typedef是一种常见的替换类型名称的东西
例如
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL a;
return 0;
}
在一个typedef中,我们需要知道两个问题。我们要换的是什么?我们换成了什么?
判断的方式很简单
typedef <…> <换成的东西>
最后换成的东西必须是一个单词(中间不能有空格)
所以不管一个typedef后面怎么复杂,最后换成的一定是这句话最后的一个单词,
而这个单词前面的全都是需要替换的内容。
例如
typedef abc d e f g h i j…k l m n
这个typedef就是把 abc d e f g h i j…k l m用一个n来代替。
这也是为什么typedef long long LL;是long long 用LL代替 ,而不是long用long LL代替的原因。
所以typedef的使用还是非常简单的,只需要记住最后一个单词代表前面所有内容即可。
我们需要特别注意一个用法
结构体的typedef
如果我们在定义完结构体之后还要定义这个类型的变量
我们通常是这样
#include <bits/stdc++.h>
using namespace std;
struct student
{
char name[25];
int score;
};
int main()
{
struct student stu[100];
return 0;
}
struct student****写起来非常麻烦
所以我们可以用到typedef
#include <bits/stdc++.h>
using namespace std;
typedef struct student
{
char name[25];
int score;
}STU;// 千万别以为是定义了一个STU的student类型变量(不加typedef才是这个意思)
int main()
{
STU stu[100];
return 0;
}
在这里,我们把typedef我们常见的形式
typedef struct student{char name[25];int score;} STU;
是不是很熟悉呢,
我们看最后一项 STU(不一定必须用空格隔开,是最后一项内容即可) ,它就是我们需要替换成的东西,
那原体是什么呢?就是前面的struct student(大括号里的东西就是student的具体内容)。
所以我们就相当于用STU代表struct student,这样也就可以理解为什么我们可以写 STU stu[100];了吧,