错误示范:
cpp
#include<stdio.h>
#include<stdlib.h>
typedef struct HFTNode
{
int data;
struct HFTNode *lchild,*rchild;
}HFTNode,*HFTree;
int main()
{
HFTree root=NULL;
root = (HFTree)malloc( sizeof(HFTNode) );
root->data = 1;
root->lchild = NULL;
root->rchild = NULL;
printf("%d \n",root->data);
HFTNode node = NULL;
node = (HFTree)root;
printf("%d \n",node.data);
return 0;
}
原因:
上述代码中,
cpp
HFTNode node = NULL;
这一行会出现类型不匹配的错误,原因在于:
此时HFTNode是一个结构体类型(非指针类型),而 NULL通常被定义为 (void*)0,是一个空指针常量。
现试图将一个指针值(NULL)赋给一个结构体变量(node),这在 C 语言中是不允许的,因为它们的类型不兼容-> 修正方法如下:
如果想定义一个指向HFTNode的指针变量,应该这样写:
cpp
HFTNode *node = NULL;
这样 node就是一个指针,可以赋值为 NULL,也可以指向已经分配的HFTNode 结构体。
另外,在后面的 node = (HFTree)root; 中,如果 node已经是指针类型,那么直接写 node = root; 即可,因为 root也是 HFTree类型(即HFTNode*),无需强制类型转换。
修改结果:
cpp
#include<stdio.h>
#include<stdlib.h>
typedef struct HFTNode
{
int data;
struct HFTNode *lchild,*rchild;
}HFTNode,*HFTree;
int main()
{
HFTree root=NULL;
root = (HFTree)malloc( sizeof(HFTNode) );
root->data = 1;
root->lchild = NULL;
root->rchild = NULL;
printf("%d \n",root->data);
HFTNode *node = NULL;
node = root;
printf("%d \n",node->data);
return 0;
}