結構體(struct)的不同寫法和tag字首
阿新 • • 發佈:2019-01-10
結構體有多種不同的宣告定義寫法,且在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。