1. 程式人生 > >結構體(struct)的不同寫法和tag字首

結構體(struct)的不同寫法和tag字首

     結構體有多種不同的宣告定義寫法,且在C、C++中使用略有差別,再者用typedef帶來方便的同時,也造成了更多寫法的混淆。本文的目的就是總結struct的各種宣告定義方法,理清思路,避免混淆。總結有誤之處,請大家指正。 一、struct宣告定義總結 結構體宣告由三部分組成,tag, member-list, variable-list。           struct tag           {                member-list;           }variable-list; 所有可選部分不能全部省略--它們至少出現2個。 (1)傳統C語言中,定義結構體的標準語法是:   //先宣告結構體型別再定義變數名          struct tagXX          {          };   宣告struct新物件時,必須帶上struct,即struct
 tagXX a;寫成tagXX a的形式是錯誤的,但是在C++中卻是可以的。 (2)在宣告型別的同時定義變數           struct tagXX           {           }a,b; (3)直接定義結構體型別變數           struct  //注意沒有結構體型別名           {           }a;     這種寫法是最沒人用的,因為它的定義是一次性的  -------------------------------------------------分割線----------------------------------------------------------- 宣告結構體時可以使用的另一種良好技巧是用typedef建立一種新的型別
。 (4)使用typedef的情況1           typedef struct   //注意沒有結構體標籤           {           }XX;      用法:XX a;      這是個匿名結構體,XX是匿名結構體的別名 (5)使用typedef的情況2           typedef struct tagXX           {           }XX;      用法:XX a;(或者 tagXX a; 也可以)      最常用的寫法,清晰不言自明,tagXX是結構體標籤,XX是 struct tagXX的別名  二、tag字首 (1)tag是標籤的意思,其實用不用tag字首不是必須的,名字可以自己隨便取; (2)在typedef情況中,tagXX可以作為一種新的型別,如:           typedef struct tagXX           {           }XX;           XX a;  //宣告變數a (3)  struct tagXX           {                member-list;           }variable-list;      這種情況下,在C語言中,要使用struct tagXX a來宣告變數a;在C++中,可以直接使用tagXX a。