typedef是C语言中一个很好用的工具,大量存在于已有代码中。
typedef 拆开 即为:type define,翻译过来是类型定义,一般用于为类型起别名。
typedef定义的一般形式为: typedef 原类型名 新类型名 新类型名一般用大写表示,以便于区别。
例1:typdefe int integer
Typedef为类型起别名总共分两步:
第一步:声明一个变量 int integer;
第二步:前边加个typedef typedef int integer;
大家都知道第一步的语句声明了一个变量integer,其类型是整型;如果在这个声明的前面加上一个typedef后,整个语义又会是如何改变的呢?这以后integer是int类型的别名,所有用到int的地方都可以使用integer来替换。
如:integer a,b; 它等效于: int a,b; //a,b都是整型的变量
说白了,integer本来是一个变量的身份,前边加个typedef后,摇身一变,变成了integer的类型的别名,具有了定义变量的权利。
typedef为类型起别名,别名一般用大写,前边小写是为了易理解。
注意:这里要区分typedef 与define,有这样一道常考的笔试题:
typedef char *CHAR与#define PCHAR char* 二者在功能上有什么不同?
程序执行结果为:
分析:define为机械替换,CHAR a,b等价于char *a,b;即 char*a;char b;
此时a是char*类型,b是char类型
Typedef是为类型起别名,PCHAR c,d 等价于char *c;char *d;此时c和d都是char*类型。
例2:为结构体取别名
以前的代码中,声明结果体新对象时,必须带上struct 结构体名,如:
struct stu
{
char name[20];
int age;
char sex;
};
Struct stu s1,s2;//s1,s2皆为结构体对象
使用typedef为结构体取别名:
typedef struct stu
{
char name[20];
int age;
char sex;
} STU;
定义STU表示struct stu的结构类型,然后可用STU来说明结构变量: STU s1,s2; 这里的STU s1,s2等价于上边的struct stu s1,s2; 代码更加简洁。
例3:typedef int AR[5]
AR a;
AR 和a分别代表什么?根据例1所述,去掉typedef ,AR是含有5个整型元素的数组,加上typedef后,AR是一个类型名,代表很有5个整型元素的数组类型,AR定义的a,那么a就是一个含有5个整型元素的数组。
程序运行的结果为:
例4:是为函数指针起别名
typedef int (*PFUN)(int);
PFUN pf;
根据以上推理:
PFUN 是函数指针类型,该指针类型指向返回值类型为int,参数类型为int的函数, 用PFUN这个类型去定义变量pf,此时的pf是函数指针变量,这个变量是指向返回值为int,形参类型为int的一类函数。
程序执行结果: