定义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得到, .号为域操作符。



原文地址:https://www.cnblogs.com/yagzh2000/p/2160410.html