1. 基本解釋 typedef爲C語言的關鍵字,做用是爲一種數據類型定義一個新名字。這裏的數據類型包括內部數據類型(int,char等)和自定義的數據類型(struct等)。 在編程中使用typedef目的通常有兩個,一個是給變量一個易記且意義明確的新名字,另外一個是簡化一些比較複雜的類型聲明。至於typedef有什麼微妙之處,請你接着看下面對幾個問題的具體闡述。html
2. typedef & 結構的問題 當用下面的代碼定義一個結構時,編譯器報了一個錯誤,爲何呢?莫非C語言不容許在結構中包含指向它本身的指針嗎?請你先猜測一下,而後看下文說明: c++
typedef struct tagNode |
答案與分析:1、typedef的最簡單使用數據結構
typedef long byte_4;spa |
給已知數據類型long起個新名字,叫byte_4。 2、 typedef與結構結合使用指針
typedef struct tagMyStruct |
這語句實際上完成兩個操做:1) 定義一個新的結構類型htm
struct tagMyStruct |
分析:tagMyStruct稱爲「tag」,即「標籤」,其實是一個臨時名字,struct 關鍵字和tagMyStruct一塊兒,構成了這個結構類型,不管是否有typedef,這個結構都存在。 咱們能夠用struct tagMyStruct varName來定義變量,但要注意,使用tagMyStruct varName來定義變量是不對的,由於struct 和tagMyStruct合在一塊兒才能表示一個結構類型。
2) typedef爲這個新的結構起了一個名字,叫MyStruct。get
typedef struct tagMyStruct MyStruct; |
所以,MyStruct實際上至關於struct tagMyStruct,咱們可使用MyStruct varName來定義變量。
答案與分析
C語言固然容許在結構中包含指向它本身的指針,咱們能夠在創建鏈表等數據結構的實現上看到無數這樣的例子,上述代碼的根本問題在於typedef的應用。根據咱們上面的闡述能夠知道:新結構創建的過程當中遇到了pNext域的聲明,類型是pNode,要知道pNode表示的是類型的新名字,那麼在類型自己尚未創建完成的時候,這個類型的新名字也還不存在,也就是說這個時候編譯器根本不認識pNode。解決這個問題的方法有多種:
1)、
typedef struct tagNode |
2)、
typedef struct tagNode *pNode; |
注意:在這個例子中,你用typedef給一個還未徹底聲明的類型起新名字。C語言編譯器支持這種作法。
3)、規範作法:
struct tagNode |
閱讀全文