第一:四個用途
用途一:
定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如:char* pa,pb;//不符合定義兩個指標的意圖,只是宣告乙個指向字元變數的指標和乙個字元變數
但是以下則可行:
typedef char* pchar;
pchar pa,pb;//同時宣告兩個指向字元變數的指標
用途二:
簡寫**形式
用途三:
為複雜的宣告定義乙個新的簡單的別名。方法是在原來宣告裡逐步用別名替換一部分複雜的宣告,如此迴圈,把帶變數名的部分留到最後替換。
1.原宣告: int*(*a[5])(int,char*);
變數名為a,直接用乙個新別名pfunc替換a;
typedef int *(*pfunc)(int,char);
原宣告的最簡化版
pfunc a[5];
2.原宣告:void (*b[10])(void(*)())
變數名為b,先替換右邊部分括號裡,pfuncparam為別名一:
typedef void (*pfuncparam)();
再替換左邊的變數b,pfunc為別名二:
typedef void(pfunc)(pfuncparam);
最簡化版:
pfunc b[10];
3.原宣告:double()()(*e)[9];
變數名為e,先替換左邊部分,pfunc為別名一:
typedef double(*pfunc)();
再替換右邊的變數e,pfuncparam為別名二:
typedef pfunc (*pfuncparam)[9];
最簡化版:
pfuncparam e;
由此推出:
type ()(…) 函式指標
type () 陣列指標
兩大陷阱
陷阱一:
typedef不是簡單的字元替換
例如:typedef char* pstr
const pstr實際上相當於char* const
陷阱二:
typedef在語法上是乙個儲存類的關鍵字(如auto、extern、mutable、static、register等一樣),雖然它並不真正影響物件的儲存特性,如:
typedef static int int2; //不可行
編譯將失敗,會提示「指定了乙個以上的儲存類」。
typedef用法詳解
用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar 一般用大寫 pchar pa,pb 可行,同時宣告了兩個指向字...
typedef用法詳解
typedef作為型別定義關鍵字,用於在原有資料型別 包括基本型別 構造型別和指標等 的基礎上,由使用者自定義新的型別名稱。在程式設計中使用typedef的好處,除了為變數取乙個簡單易記且意義明確的新名稱之外,還可以簡化一些比較複雜的型別宣告。比如 typedef int int32 將int32定...
typedef用法詳解
用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar pchar pa,pb 這種用法很有用,特別是char pa,...