使用typedef定義結構體的問題

在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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章