typedef的用法

#基本定義 定義:typedef是C語言的關鍵字之一,它是一種高級數據特性,它讓你能夠爲某一類型建立你本身的名字。
#和define的不一樣之處html

  • 和#define不一樣,typedef給出的符號名稱僅限於對類型,而不是對值。
  • typedef的解釋由編譯器進行,而不是預處理器執行。
  • 雖然它的範圍有限,可是在受限範圍內,比#define更加靈活。
    #typedef的用法主要有如下幾點 ###1.直觀簡潔,減小代碼的書寫量 如能夠對結構體使用:
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 int (*MYFUN)(int, int); 這種用法通常用在給函數定義別名的時候 上面的例子定義MYFUN 是一個函數指針, 函數類型是帶兩個int 參數, 返回一個int

在分析這種形式的定義的時候能夠用下面的方法: 先去掉typedef 和別名, 剩下的就是原變量的類型. 去掉typedef和MYFUN之後就剩: int (*)(int, int)blog

相關文章
相關標籤/搜索