typedef关键字
除了可以直接使用C语言提供给我们的数据类型名(如int,char,float,double等)和我们自己定义的结构体类型名以外,还可以使用typedef指定新的数据类型名来代替已有的类型名。换句话说,typedef的作用就是对已有的数据类型起别名。例如:
#include <stdio.h>
typedef int Integer; // 给int取了个别名叫Integer,下面就可以用Integer来定义整形变量
typedef char * String; // 给char *取了个别名叫String,下面就可以用String来定义字符型指针变量
int main()
{
Integer i = 10; // 等同于 int i = 10;
String p; // 等同于 char * p;
return 0;
}
#include <stdio.h>
typedef struct Student
{
char name[100];
int age;
float score;
}ST, * PST; // 给 struct Student 起了个别名ST,给 struct Student * 起了个别名叫PST
int main()
{
ST stu; // 等同于 struct Student stu;
PST pStu; // 等同于 ST * pStu; 也等同于 struct Student * pStu;
return 0;
}
需要注意的是,C语言中允许原结构体名与使用typedef重新命名的结构体名相同,例如:
#include <stdio.h>
typedef struct Student
{
char name[100];
int age;
float score;
}Student; // 此时的 Student 就等同于 struct Student
int main()
{
Student stu; // 等同于 struct Student stu;
return 0;
}
- 为什么要给数据类型重新命名?
- 首先是为了方便程序员编程,例如当我们定义结构体变量时,如果总是要先写
struct
再写结构体名的话,定义结构体变量就变得十分繁琐,每次都要写一遍struct
,而且写代码时很容易忘记写它,而且这样代码也会显得比较累赘,如果我们可以用很短的几个字母来表示一个很长的结构体名,那我们何乐而不为呢? - 其次是为整个程序的通用性,如果一个程序最初的存储数据的变量都是整型,在程序中自然定义的都是整型变量,但如果某个时候想要把所有所有定义的数据变量都改为浮点型,工作量可想而知,但是有
typedef
来帮忙,只需要一步就可以搞定。由于我们最开始要存储的是整型数据,那我们可以将int先重新命名为ElemType
(当然名字可以随便取,这里取为ElemType
只是方便在数据结构中使用),即,typedef int ElemType;
,当我们想把这些数据对应的变量改为浮点型时,我们只需要做这样的操作即可typedef float ElemType;
,相较一个一个去修改变量的类型而言,使用typedef
真的很省事! - 再有,为了在编程时达到代码即注释的目的,厉害的程序员往往会对数据类型重新命名。
- 如果不是很理解为什么要这样的话,可以先在脑海里留个印象,需要用到这部分内容时再回来仔细分析一番,大家可以多敲多看,其实在编程过程中就会逐渐明白这样做的好处。