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