typedef是C語言中一個很好用的工具,大量存在于已有代碼中。
typedef 拆開 即為:type define,翻譯過來是類型定義,一般用于為類型起別名。
typedef定義的一般形式為: typedef 原類型名 新類型名 新類型名一般用大寫表示,以便于區(qū)別。
例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為類型起別名,別名一般用大寫,前邊小寫是為了易理解。
注意:這里要區(qū)分typedef 與define,有這樣一道?嫉墓P試題:
typedef char *CHAR與#define PCHAR char* 二者在功能上有什么不同?
程序執(zhí)行結果為:
分析: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的一類函數。
程序執(zhí)行結果: