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;   
};   



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