在C中定義一個結構體要用typedef,如:
typedef struct Student { int a; }Stu;於是在聲明變量的時候就可以:Stu stu1;(如果沒有typedef就必須用struct Student stu1;來聲明)。這裡的Stu實際上就是struct Student的別名:Stu == struct Student.
當然其實這裡可以不寫Student,如下:
typedef struct { int a; }Stu;
請看下面的代碼:
typedef struct tagMyStruct{ int iNum; long lLength; } MyStruct;
(1)定義一個結構體:
struct tagMyStruct{ int iNum; long lLength; };tagMyStruct稱為tag,即標簽,實際上是一個臨時名字,不論是否有typedef struct關鍵字和tagMyStruct一起,都構成了這個結構體。此時我們可以使用struct tagMyStruct varName來定義變量。但是注意,使用tagMyStruct varName來定義變量是不對的。因為struct和tagMyStruct合在一起才能表示一個結構體類型。
(2)typedef為這個新的結構起了一個名字,叫MyStruct.
typedef struct tagMyStruct MyStruct. 因此MyStruct實際上相當於struct tagMyStruct,我們可以使用MyStruct varName來定義變量。
對於同樣的代碼,在C和C++中也有不同的理解。如下:
typedef struct tagMyStruct{ int iNum; long lLength; } MyStruct;在C中,這個結構體聲明結構體變量的方式有兩種:
1)struct tagMyStruct 變量名;
2)MyStruct 變量名;
在C++中:
1)struct tagMyStruct 變量名;
2)MyStruct 變量名;
3)tagMyStruct 變量名;