定义struct类型
看下下面的代码:
typedef struct tagUser
{
char* pItem;
short Age;
tagUser* pNext;
}User;
typedef: 定义一个新类型或为一类型起个别名。
struct: 表示为一结构体类型.
tagUser:类型名称。以后可以以此类型声明变量,如 tagUser myUser;
User: 类型 tagUser的别名,即它们是同种类型,可以这样声明一变量: User myuser;
我们在User类型的结构体内会看到pNext的指针,它指向下一个本类型的地址,它的类型为struct tagUser,即我们所说的链表。
.
如果我们变成以下代码
typedef struct tagUser
{
char* pItem;
short Age;
User* pNext; // 此处错误
}User;
你再编译一下,会发现编译器给出出错提示,为什么?
因为在User* pNext处时,User这个类型的声明还不存在,故出错,但把User变为struct tagUser或tabUser就可以了,因为之前已声明了。
如果不用typedef,则只是声明一个类型即:
struct tagUser
{
char* pItem;
short Age;
struct tagUser* pNext;
}User;
此时的User不是类型而是一个 tagUser类型的一个变量。
如:User.pItem=0;
User.Age=20;
User.pNext=0;
如果再声明一个此结构的变量 则为: tagUser Another; Another为变量。
以上用typedef声明类型也可以用以下格式:
1.
typedef struct tagUser User;
struct tagUser
{
char *pItem;
short Age;
User* pNext; //用到了User关键字
};
2.
typedef struct tagUser
{
char *pItem;
short Age;
struct tagUser* pNext; //与1的区别
}User;
通常的格式为:
struct tagUser
{
char *pItem;
short Age;
struct tagUser* pNext;
};
typedef struct tagUser User;
struct的初始化:
如:
tagUser myuser=
{
NULL,
50,
NULL
};
如果要得到某项的值,可用myuser.Age得到, .号为域操作符。