在C語言中有一個typedef關鍵字,其用來定義用戶自定義型別,當然,并不是真的創造了一種資料型別,而是給已有的或者符合型的以及復雜的資料型別取一個我們自己更容易理解的別名,總之,可以使用typedef關鍵字定義一個我們自己的型別名稱,它本身是一種存盤類的關鍵字,與auto、extern、mutable、staTIc、register等關鍵字不能出現在同一個運算式中,
那么,究竟如何定義,又有哪些情況下可已使用呢?接下來我們就對它的幾種用法進行說明:
C語言中typedef的用法
1.基本資料型別定義
例如:typedef unsigned char uchar
描述:uchar等價于unsigned char型別定義 uchar c宣告等于unsigned char c宣告
2.陣列型別定義
例如: typedef int array[2];
描述: array等價于 int [2]定義; array a宣告等價于int a[2]宣告
擴展: typedef int array[M][N];
描述: array等價于 int [M][N]定義; array a宣告等價于int a[M][N]宣告
3.指標型別定義
例如: typedef int *pointer;
描述: pointer等價于 int *定義;pointer p宣告等價于int *a宣告
例如: typedef int *pointer[M];
描述: pointer等價于 int *[M]定義 pointer p宣告等價于int *a[M]宣告
4.函式地址說明
描述:C把函式名字當做函式的首地址來對待,我們可以使用最簡單的方法得到函式地址
例如: 函式:int func(void); unsigned long funcAddr=(unsigned long)func, funcAddr的值是func函式的首地址
5.函式宣告
例如: typedef int func(void); func等價于 int (void)型別函式
描述1: func f宣告等價于 int f(void)宣告,用于檔案的函式宣告
描述2: func *pf宣告等價于 int (*pf)(void)宣告,用于函式指標的生命,見下一條
6.函式指標
例如: typedef int (*func)(void)
描述: func等價于int (*)(void)型別
func pf等價于int (*pf)(void)宣告,pf是一個函式指標變數
typedef關鍵字與#define宏定義的區別
#define 是 C 指令,用于為各種資料型別定義別名,與 typedef 類似,但是它們有以下幾點不同:
1.從功能范圍上講,Typedef用來定義型別的別名,這些型別不只包含內部型別(int,char等),還包括自定義型別(如struct),可以起到使型別易于記憶的功能,它還有另外一個重要的用途,那就是定義機器無關的型別 ,#define不只是可以為型別取別名,還可以定義常量、變數、編譯開關等,
typedef主要是為已存在的關鍵字或型別及其組合取一個我們容易識別的別名,在這一點上#define也可實作,但初次之外#define還有很多其它用處,如果愿意你可以使用它定義任何代碼,這時typedef所不具備的,
2.從執行時間上講,對于#define定義的宏,其在預處理階段就會被替換,而typedef定義的型別會在編譯時處理,
3.從作用于上來講,一般來說#define定義的宏沒有作用域的限制,只要在使用前有定義就可以了,而typedef定義的別名是有作用域的,
4.從實作效果來講,我們使用typedef定義一個指標型別,然后使用該型別可以同時宣告對各變數,而#define卻不是這樣的,如typedef (int*) pType;可以使用pType a,b;這里a和b都是指向整數的指標變數,但我們同樣定義#define pType int*,若使用pType a,b;定義a和b,則a是指向整數的指標變數,而b不是,
總結:結合上文,不難看出,在對資料型別名進行自定義時,采用typedef更為保險,當然也非一成不變的規律,主要是理解二者的區別,依情況選用,
識別typedef的方法
a)、第一步,使用已知的型別定義替代typdef后面的名稱,直到只剩下一個名字不識別為正確;
b)、第二步,未知名字為定義型別,型別為取出名稱和typedef的所有部分;
c)、第三步,定義一個變數時,變數型別等價于把變數替代未知名字的位置所得到的型別,

如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
【C語言C++學習企鵝圈子】,分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍:

編程學習視頻:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/253796.html
標籤:C
