C語言--typedef struct與struct定義結構體的區別

我在很多C語言代碼中看到很多定義結構體時使用typedef struct,而不適用struct,就瞭解了這樣做的原因:

typedef是類型定義的意思。typedef struct 是爲了使用這個結構體方便。
具體區別在於:
(1)若struct node {}這樣來定義結構體的話。在申請node 的變量時,需要這樣寫,struct node n;
(2)若用typedef,可以這樣寫,typedef struct node{}NODE; 。在申請變量時就可以這樣寫,NODE n;
區別就在於使用時,是否可以省去struct這個關鍵字。

=========================================================

定義結構變量的一般格式爲:

struct 結構名
{
    類型 變量名;
    類型 變量名;
    ...
} 結構變量;

結構名是結構的標識符不是變量名。

另一種常用格式爲:

typedef struct 結構名
{
    類型 變量名;
    類型 變量名;
    ...
} 結構別名;

===========================================================

分兩塊來講述:
1 )首先:
在C中定義一個結構體類型要用typedef:

typedef struct Student
{
    int a;
}Stu;

於是在聲明變量的時候就可:Stu stu1;如果沒有typedef就必須用struct Student stu1;來聲明,這裏的Stu實際上就是struct Student的別名。
另外這裏也可以不寫Student(於是也不能struct Student stu1了)

typedef struct
{
    int a;
}Stu;

2)如果在c程序中我們寫:

typedef struct
{
    int num;
    int age;
}aaa,bbb,ccc;

這算什麼呢?我個人觀察編譯器(VC6)的理解,這相當於

typedef struct
{
    int num;
    int age;
}aaa;
typedef aaa bbb;
typedef aaa ccc;

也就是說aaa,bbb,ccc三者都是結構體類型。聲明變量時用任何一個都可以,在c++中也是如此。但是你要注意的是這個在c++中如果寫掉了typedef關鍵字,那麼aaa,bbb,ccc將是截然不同的三個對象。

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