1. 程式人生 > >如何理解 C 語言中的 typedef

如何理解 C 語言中的 typedef

作者:Skycell
連結:https://www.zhihu.com/question/19894694/answer/13278588

先熟悉函式指標的宣告形式:資料型別 (* 指標變數名) (形參列表); 

函式指標—指向函式的指標  指標函式—返回指標的函式

例如: int (* func)(void);//這是一個變數宣告語句(指標函式的宣告),聲明瞭一個函式指標變數func,注意區別指標函式和函式指標。 func = &test; //變數賦值(給指標函式賦值);

那麼現在來理解typedef int (* func)(void)語句;
1.去掉"typedef"得到一個正常的變數宣告語句(指標函式宣告): int (*func)(void);這裡變數func的型別為一個函式型別,而當加上”typedef"後,就得到一個新的型別, 原來的變數名稱func就變成新型別的名稱,func不再是變數名稱,而是一個新型別名--func,用這個新的型別就可以去定義和原來func變數相同型別的變數,注意看去除和加上"typedef“時func的變化,沒有"typedef"時,func為變數名,加上"typedef"時,func為型別名(這個型別等同於原來func變數的型別),因此下面正確:

typedef int (* t_func)(void);//定義了一個新型別 t_func;
int (*func)(void); 變數宣告語句(指標函式宣告):
//....
t_func func2 = func; //func2和func是相同型別,這就好理解加上"typedef"產生的變化了。

可以這麼想,加上"typedef"關鍵字後,原來語句宣告的變數變成型別,以下正確:
1. int id; ==> typedef int ID; //在加上"typedef"後,變數id就變成型別ID(為了清楚,把型別變大寫),這個新型別等同於原來變數對應的型別; id <==>ID id ;
2. int a[10]; ==> typedef int A[10];//加上"typedef"後,變數a就成了型別A(為了清楚,把型別變大寫),這個新型別等同於原來變數對應的型別; a <=> A a;

因此typedef就好理解。