代碼簡化, 促進跨平台開發的目的.
typedef 行為有點像 #define 宏,用其實際類型替代同義字。
不同點:typedef 在編譯時間被解釋,因此讓編譯器來應付超越前置處理器能力的文本替換。
用法一:
typedef int (*MYFUN)(int, int);
這種用法一般用在給函數定義別名的時候
上面的例子定義MYFUN 是一個函數指標, 函數類型是帶兩個int 參數, 返回一個int
在分析這種形式的定義的時候可以用下面的方法:
先去掉typedef 和別名, 剩下的就是原變數的類型.
去掉typedef和MYFUN以後就剩:
int (*)(int, int)
用法二:
typedef給變數類型定義一個別名.
typedef struct{
int a;
int b;
}MY_TYPE;
這裡把一個未命名結構直接取了一個叫MY_TYPE的別名, 這樣如果你想定義結構的執行個體的時候就可以這樣:
MY_TYPE tmp;
第二種用法:typedef 原變數類型 別名
簡單的函數指標的用法
//形式1:傳回型別(*函數名)(參數表)
char(*pFun)(int);
//typedef char(*pFun)(int) //跟上一行功能等同
/*typedef的功能是定義新的類型。第一句就是定義了一種PTRFUN的類型,並定義這種類型為指向某種函數的指標,這種函數以一個int為參數並返回char類型。*/
char glFun(int a){return;}
void main()
{
pFun =glFun;
(*pFun)(2);
}
第一行定義了一個指標變數pFun.它是一個指向某種函數的指標,這種函數參數是一個int類型,傳回值是char類型。只有第一句我們還無法使用這個指標,因為我們還未對它進行賦值。
第二行定義了一個函數glFun().該函數正好是一個以int為參數返回char的函數。我們要從指標的層次上理解函數-函數的函數名實際上就是一個指標,函數名指向該函數的代碼在記憶體中的首地址。