1、typedef關鍵字
C 語言提供了 typedef 關鍵字,您可以使用它來爲類型取一個新的名字。下面的實例爲單字節數字定義了一個術語 BYTE:
typedef unsigned char BYTE;
在這個類型定義之後,標識符 BYTE 可作爲類型 unsigned char 的縮寫,例如:
BYTE b1, b2;
typedef相當於給unsigned char起了一個別名。
typedef vs #define
#define 是 C 指令,用於爲各種數據類型定義別名,與 typedef 類似,但是它們有以下幾點不同:
-
typedef 僅限於爲類型定義符號名稱,#define 不僅可以爲類型定義別名,也能爲數值定義別名,比如您可以定義 1 爲 ONE。
-
typedef 是由編譯器執行解釋的,#define 語句是由預編譯器進行處理的。
2、typedef struct
typedef struct的使用方法有很多種,這裏只介紹最標準的一種使用方法:
聲明:
typedef struct Student { int a; }Stu;
使用:
Stu xiaoming;
區別:
若struct node {}這樣來定義結構體的話。在申請node 的變量時,需要這樣寫,struct node n; 若用typedef,可以這樣寫,typedef struct node{}NODE; 。在申請變量時就可以這樣寫,NODE n; 區別就在於使用時,是否可以省去struct這個關鍵字。
但是在C++中又會造成區別:
在c++中如果用typedef的話:
struct Student { int a; }stu1;//stu1是一個變量 typedef struct Student2 { int a; }stu2;//stu2是一個結構體類型
stu1是一個變量,使用時可以直接訪問stu1.a stu2是一個結構體類型,使用時則必須先 stu2 s2
3、結構體指針
定義:
typedef struct Student { int a; }Stu,*pStu;
使用:
pStu exam1; Stu exam2; exam1 = exam2; exam2.a = 1; printf("%d",exam1->a);//輸出爲1
或者:
Stu exam[4]; pStu p; p = exam; p +=2;//等價於p = exam[1]
等價於:
typedef struct Student { int a; }Stu;
Stu *exam1; Stu exam2; exam1 = exam2; exam2.a = 1; printf("%d",exam1->a);//輸出爲1