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