typedef 结构体 在线等 感谢

来源:百度知道 编辑:UC知道 时间:2024/06/21 17:52:46
typedef struct BiTNode
{
char data;
struct BiTNode *Lchild,*Rchild;
}BiTNode,*BiTNodePtr;
请问下 这里的BiTNode 是结构体类型名还是结构体变量名,后面的那个*BiTNodePtr;是变量?在我们用结构体时候,是只能用结构体变量来操作吧,那结构体类型有什么用呢?

还有在操作的时候是用。还是->?
非常感谢

BiTNode,BiTNodePtr;
都是类型,前者是结构体类型,后者是结构体指针类型。
使用方法如下:
BiTNode bitn;
BiTNodePtr pbitn;
bitn.data = 'a';
pbitn = &bitn;

printf("bint.a= %c",pbitn->data);

不过,一般来说 struct 后面的那个名字应该和}后面的名字不一样,下面的代码就比较规范:
typedef struct _tagBITNODE
{
char data;
struct _tagBITNODE *Lchild;
struct _tagBITNODE *Rchild;
} BITNODE,*PBITNODE;
然后一般都用类型 BITNODE和PBITNODE来定义变量。

第一个BiTNode是没用的,后边的BiTNode是自定义结构体的指针,*BiTNodePtr是自定义结构体的指针
使用时:
BiTNode bt;
BiTNodePtr btPtr;
bt.成员。。。
btPtr->成员。。。

BiTNode 是结构体类型名

*BiTNodePtr是结构体指针类型

结构体类型就像是int char float一样 可以定义结构体变量

像*BiTNodePtr指针类型的 可以用.或者->访问成员
不是指针的结构体变量 访问成员时只能用.

你这样将变量名和结构体名写为一样是不对的。
typedef struct BiTNode
{
char data;
struct BiTNode *Lchild,*Rchild;
}biTNode,*BiTNodePtr;
像上面这样写是可以的。
上面这样写的话BiTNode就是结构体名,而biTNode是结构体变量名。后面的*