struct和typedef struct

1、struct  _x1 { ...}x1; 和 typedef  struct  _x2{ ...} x2; 有什麼不同? 

前者是定義了類_x1和_x1的對象實例x1,  後者是定義了類_x2和_x2的類別名x2 

  struct 結構名       

   {             

類型  變量名;             

類型  變量名;              

  ...        

  } 結構變量;     


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

在C中,struct不能包含函數。在C++中,對struct進行了擴展,可以包含函數。  

2、typedef struct與struct的區別   

2.1、typedef爲C語言的關鍵字,作用是爲一種數據類型定義一個新名字。這裏的數據類型包括內部數據類型(int,char等)和自 定義的數據類型(struct等)。在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個 是簡化一些比較複雜的類型聲明。

例:

2.1.1、typedef long byte_4;   給已知數據類型long起個新名字,叫byte_4。   

2.1.2、

typedef struct tagMyStruct   

{

int iNum;   

long lLength;   

}MyStruct;   

上述完成兩個操作1、定義了一個結構體2、給這個結構體取了個別名MyStruct。

注意:

tagMyStruct稱爲“tag”,即“標籤”,實際上是一個臨時名字,struct 關鍵字和tagMyStruct一起,構成了這個結構類型 ,不論是否有typedef,這個結構都存在。

我們可以用struct tagMyStruct varName來定義變量,但要注意,使用tagMyStruct varName來定義變量是不對的, 因爲struct 和tagMyStruct合在一起才能表示一個結構類型。

因此,MyStruct實際上相當於struct tagMyStruct,我們可以使用MyStruct varName來定義變量。 

2.2、

typedef struct tagNode   
{   
  char *pItem;   
struct tagNode *pNext;   
} *pNode;   

上述錯誤:你用typedef給一個還未完全聲明的類型起新名字

解決:

typedef struct tagNode   
{   
char *pItem;   
struct tagNode *pNext;   
} *pNode;  

 
typedef struct tagNode *pNode;   
struct tagNode   
{   
  char *pItem;   
  pNode pNext;   
};   



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