错误示范:
#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;
}
原因:
上述代码中,
这一行会出现类型不匹配的错误,原因在于:
此时HFTNode是一个结构体类型(非指针类型),而 NULL通常被定义为 (void*)0,是一个空指针常量。 现试图将一个指针值(NULL)赋给一个结构体变量(node),这在 C 语言中是不允许的,因为它们的类型不兼容-> 修正方法如下: 如果想定义一个指向HFTNode的指针变量,应该这样写:
这样 node就是一个指针,可以赋值为 NULL,也可以指向已经分配的HFTNode 结构体。
另外,在后面的 node = (HFTree)root; 中,如果 node已经是指针类型,那么直接写 node = root; 即可,因为 root也是 HFTree类型(即HFTNode*),无需强制类型转换。
修改结果:
#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;
}
到此这篇关于C语言中类型转换不匹配的解决方案的文章就介绍到这了,更多相关C语言 类型转换不匹配内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!
您可能感兴趣的文章:- 详解C语言中不同类型的数据转换规则
- C语言数据类型转换实例代码
- C语言强制类型转换规则实例详解
- 浅谈c语言中类型隐性转换的坑
- C语言中强制类型转换的常见方法
- 详解C语言基础的类型转换
- C语言类型转换与常量的细节深入理解探究
- C语言简明讲解类型转换的使用与作用
- C语言中的数据类型强制转换
|