定義結構體時加typedef和不加typedef的區別

不加typedef時: 

struct S
{
    int i;
}a,b;

相當於定義了結構體S和S的兩個變量a,b

加上typedef:

typedef struct S
{
    int i;
}a,b;

除了定義結構體S,又給該結構體起了別名a和b;a和b位置的標識符就都是別名而不是變量名,a和b也可以像類型一樣用來定義結構體變量。因爲是起了別名,所以不起結構體名也沒問題,所以也等價於:

typedef struct
{
    int i;
}a,b;

這就像我們經常使用typedef給一個數據類型設定別名一樣:

typedef int D;

int main()
{
    D a;//相當於int a;
}

因此:不加typedef時,在後續使用該結構體定義其他變量時需要

struct S c;//利用struct聲明S是一個類型名

而加了typedef,後續使用該結構體定義其他變量,可以通過別名來定義

a c;
b d;//a,b均爲類型名

是不是方便很多了:)

一般使用typedef同時定義結構類型和結構指針類型,如:

typedef struct _S
{
    int i;
}s,*ps;

s a;
ps p=&a;

 

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