不加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;