在C中定義一個(gè)結(jié)構(gòu)體類型要用typedef:
typedef struct Student {
int a;
}Stu;
于是在聲明變量的時(shí)候就可:Stu stu1;(如果沒有typedef就必須用struct Student stu1;來聲明)骚灸。這里的Stu實(shí)際上就是struct Student的別名。Stu==struct Student
另外這里也可以不寫Student(于是也不能struct Student stu1;了梳虽,必須是Stu stu1;)
typedef struct
{
int a;
}Stu弓叛;
如果在c程序中我們寫:
typedef struct
{
int num;
int age;
}aaa,bbb,ccc;
這算什么呢彰居?
我個(gè)人觀察編譯器(VC6)的理解,這相當(dāng)于
typedef struct
{
int num;
int age;
}aaa撰筷;
typedef aaa bbb;
typedef aaa ccc;
也就是說aaa,bbb,ccc三者都是結(jié)構(gòu)體類型陈惰。
typedef struct和struct的區(qū)別:
typedef struct tagMyStruct
{
int iNum;
long lLength;
} MyStruct;
上面的tagMyStruct是標(biāo)識(shí)符,MyStruct是變量類型(相當(dāng)于(int,char等))闭专。
這語句實(shí)際上完成兩個(gè)操作:
? ? 1) 定義一個(gè)新的結(jié)構(gòu)類型
? ? struct tagMyStruct
? ? {
? ? ?int iNum;
? ? ?long lLength;
? ? };
分析:tagMyStruct稱為“tag”奴潘,即“標(biāo)簽”旧烧,實(shí)際上是一個(gè)臨時(shí)名字,不論是否有typedefstruct 關(guān)鍵字和tagMyStruct一起画髓,構(gòu)成了這個(gè)結(jié)構(gòu)類型掘剪,這個(gè)結(jié)構(gòu)都存在。
? ? 2) typedef為這個(gè)新的結(jié)構(gòu)起了一個(gè)名字奈虾,叫MyStruct夺谁。
? ? typedef struct tagMyStruct MyStruct;
? ? 因此,MyStruct實(shí)際上相當(dāng)于struct tagMyStruct肉微,我們可以使用MyStruct varName來定義變量匾鸥。