typedef用法詳解

typedef的一般形式爲:

typedef   類型     定義名;

在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個是簡化一些比較複雜的類型聲明。

其實,在C語言中聲明變量的時候,有個存儲類型指示符(storage-class-specifier),它包括我們熟悉的extern、static、auto、register。在不指定存儲類型指示符的時候,編譯器會根據約定自動取缺省值。另外,存儲類型指示符的位置也是任意的(但要求在變量名和指針*之前),也就是說以下幾行代碼是等價的:

static const int i;

const static int i;

int const static i;

const int static i;

根據C語言規範,在進行句法分析的時候,typedef和存儲類型指示符是等價的!所以,我們把上述使用static的地方替換爲typedef:

typedef const int i;

const typedef int i;

int const typedef i;

const int typedef i;

上述代碼的語義是:將i定義爲一個類型名,其等價的類型爲const int。以後如果我們有i   a代碼,就等價於const int a。對於有指針的地方也是一樣的,比如:

int const typedef *t;那麼代碼t   p。就相當於int const *p。

另外,typedef不能和static等存儲類型指示符同時使用,因爲每個變量只能有一種存儲類型,所以代碼:typedef static int i;是非法的。

使用typedef簡化複雜的變量聲明

1)、定義一個有10個指針的數組,該指針指向一個函數,該函數有一個整形參數,並返回一個整型?

第一種方法:int (*a[10])(int);

第二種方法:typedef int (*pfunc)(int);

             pfunc a[10];

2)、定義一個有10個指針的數組,該指針指向一個函數,該函數有一個函數指針(不帶參數,返回值爲空)參數,並返回空。

第一種方法:void (*a[10])(void (*)(void));

第二種方法:typedef void (*pfuncParam)(void);

               typedef void (*pfunc)(pfuncParam);

pfunc a[10];

3)、一個指向有10個函數指針(不帶參數,返回值爲double)數組的指針

第一種方法:double (*)(void) (*p)[10];

第二種方法:typedef double (*pfunc)(void);

             typedef pfunc (*pfuncParam)[10];

             pfuncParam p;

總結:

typedef有兩種用法:

一、一般形式,定義已有類型的別名

  typedef   類型    定義名;

二、創建一個新的類型

     typedef   返回值類型   新類型名(參數列表);

http://hi.baidu.com/ctrlaltz/blog/item/890cbbd312eac2033bf3cffe.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章