typedef工具是乙個高階資料特性,利用typedef可以為某一型別自定義名稱。它與#define有3個不同點:
(1)與#define不同,typedef建立的符號名只受限於型別,不能用於值。
(2)typedef由編譯器解釋,不是預處理器。
(3)在其受限範圍內,typedef比#define更靈活。
工作原理
使用typedef時要記住,typedef並沒有建立任何新型別,它只是為某個已存在的型別增加乙個方便使用的標籤。
示例:假設要用byte表示1位元組的陣列。
typedef unsigned char byte;
1隨後就可以用byte來定義變數:
byte x,y[10],*z;
1上面一行**就相當於
unsigned char x,y[10],*z;
1可見,typedef相當於給乙個已有的型別起了乙個新的名字,然後可以像使用舊型別名一樣使用新的型別名來宣告變數。這是否多此一舉呢?其實不是。
首先,合理使用typedef可以增加程式的可讀性,前面的示例中用byte代替unsigned char表明你打算用byte型別的變數表示數字,而不是字元碼。
其次,typedef可以提高程式的可移植性。我們知道sizeof運算子的返回值是size_t型別,time()函式返回的型別:time_t型別。這是乙個無符號數,但它不是乙個新型別。這就用到了c語言的typedef機制,允許程式設計師為現有型別建立別名。c頭檔案系統使用typedef把size_t作為unsigned int或unsigned long的別名。這樣,使用size_t型別時,編譯器會根據不同的系統替換標準型別。對於time_t類似,只要包含time.h標頭檔案,程式就能訪問合適的定義。
與#define的比較
typdef的一些特性與define的功能重合。例如
#define byte unsigned char
1這是預處理器用byte替換unsigned char。
但也有#define沒有的功能,例如:
typedef char * string;
1編譯器把string解釋為乙個型別的表示符,該型別指向char。因此
string name, sign;
1相當於
char * name , * sign;
1但是,如果這樣假設:
#define string char *
1然後,下面的宣告:
string name, sign;
1將被翻譯成:
char * name, sign;
1這導致name才是指標。
發揮typedef的好處
除了剛才上面提到的可讀性和可移植性的好處外,在一些場合還可以發揮typedef的更多好處。
使用typedef的第乙個原因:為經常出現的型別建立乙個方便、易識別的型別名。
例如,typedef用來命名乙個結構型別,可以省略結構的標籤:
typedef struct rect;
1那麼可以這樣使用rect型別名:
rect r1=;
rect r2;12
以上**被翻譯成
struct r1=;
struct r2;12
使用typedef的第二個原因是:typedef常用於給複雜的型別命名。例如,下面的宣告:
typedef char (* frptc()) [5];
1把frptc宣告為乙個函式型別,該函式返回乙個指標,該指標內含5個char型別元素的陣列。
使用typedef時要記住,typedef並沒有建立任何新型別,它只是為某個已存在的型別增加乙個方便使用的標籤。
通過結構、聯合和typedef,c提供了有效處理資料的工具和處理可移植資料的工具。
C語言的typedef指令
typedef工具是乙個高階資料特性,利用typedef可以為某一型別自定義名稱。它與 define有3個不同點 1 與 define不同,typedef建立的符號名只受限於型別,不能用於值。2 typedef由編譯器解釋,不是預處理器。3 在其受限範圍內,typedef比 define更靈活。使用...
C語言的typedef用法
案例1 include include include typedef int zhangsan 為int在多取乙個名字 zhangsan等價於int struct student st int main return 0 案例2 include include include typedef in...
C語言中的typedef
typedef是用於定義新的型別名,在程式設計中可以用typedef來定義新的型別名來代替已有的型別名 格式 typedef 已有型別名 新的型別名 通俗點說,就是為已有的型別取別名,例如 老鼠?又叫耗子?老鼠也是它,耗子也是他 但不能取新的型別名,也就是說不能憑空造出來乙個型別,必須是在已有的型別...