在c語言編程中,typedef的使用可以提高編程效率,特別實在結構體定義中,可以節省關鍵字struct,使得之後結構體定義變量時方便快捷,具體舉例如下:
typedef struct sNode
{
int x;
int y;
}Node;
此時,要定義一個類型爲struct sNode 的變量s,可以這樣寫:
Node s; //省去了前面的關鍵字struct
這裏甚至可以省略sNode,寫成如下形式:
typedef struct
{
int x;
int y;
}Node;
這樣定義結構體也是可以的,之後定義結構體變量s方法相同:
Node s; //在定義結構體時省略了struct後的名字,但tyepdef一樣給這個結構體起了個別名Node
但是,當結構體內需要定義指向自身的指針時(鏈表中常用),struct後的關鍵字不能省,須寫成如下形式:
typedef struct sNode
{
int x;
int y;
struct sNode *next; //next爲指向自身類型的結構體指針
}Node;
若把 struct sNode *next; 寫成 Node *next; 則會報錯,因爲這裏實際有兩步操作,1、定義結構體 2、起別名,c語言允許在定義結構體時同時定義指向自身的指針,但若同時再起個別名,在語法上是不允許的,相當於步子跨的太多了。若把 struct sNode *next; 寫成sNode *next; 在vs編譯器中編譯是沒問題的,因爲vs同時支持C語言和C++語言,在C++語法下,struct 關鍵字可省,但如果是純c語言編譯環境,這樣寫會報錯。
此時定義結構體變量,同樣是寫作:
Node s;