#基本定義 定義:typedef是C語言的關鍵字之一,它是一種高級數據特性,它讓你能夠爲某一類型建立你本身的名字。
#和define的不一樣之處html
typedef struct complex { float real; float imag; } COMPLEX;
這樣就能夠用類型COMPLEX代替struct complex來表示複數,這樣能夠爲常常出現的類型建立一個方便、可識別的類型。
###2.減小錯誤 定義一種類型的別名,而不僅是簡單的宏替換。能夠用做同時聲明指針型的多個對象。好比:函數
char* pa, pb; // 這多數不符合咱們的意圖,它只聲明瞭一個指向字符變量的指針, // 和一個字符變量;
如下則可行:指針
typedef char* PCHAR; PCHAR pa, pb;
這種用法頗有用,特別是char* pa, pb的定義,初學者每每認爲是定義了兩個字符型指針,其實不是,而用typedef char* PCHAR就不會出現這樣的問題,減小了錯誤的發生。 ###3.複用性和可拓展性 若是一段代碼沒有擴展性和複用性,那麼這段代碼就不能算得上是一段特別規範的代碼,就像咱們爲了實現代碼的複用性,提升程序可讀性的時候,用函數同樣,提升代碼的複用性和可擴展性是做爲軟件開發者必備的本領。一段好的代碼,若是在別的項目中引用的話,若是功能相似,基本上改不了幾行,這就是規範性的重要性(這裏先不談規範性,可是這個typedef的用法也涉及規範性,嘿嘿,因此規範是避免不了的)。就這麼來講吧,假如咱們定義了一個結構體code
struct student{ int score; char name[10]; }
咱們想把成績改爲double類型的,應爲int的精度過低了,可是下面用到的地方可能都要改掉,可是,咱們要是用typedef一下, 問題就變得簡單多了,htm
typedef int typeitem; struct student{ typeitem score; char name[10]; }
這樣直接改typedef就好了,其餘的代碼根本不用動,這就是分層的緣由,咱們只改變最底層的,上層的東西根本不用變(就像在鏈表中,咱們能夠把它分爲三層,純數據層、節點層、head指針層,也就是整條鏈)這樣分層處理問題會變得簡單得多。還有就是平臺不一樣能夠兼容,就像有的平臺不支持long double類型,可是你若是定義了long double 直接不能用,可是若是這麼 typedef long double typeitem; 直接改爲能夠支持的類型就行啦,根本不用那麼麻煩改下面的代碼,這也是比較重要的用途。
###4.代碼簡化對象
在分析這種形式的定義的時候能夠用下面的方法: 先去掉typedef 和別名, 剩下的就是原變量的類型. 去掉typedef和MYFUN之後就剩: int (*)(int, int)blog