C语言中关于类型转换不匹配的解决方案

错误示范:

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;
}

相关推荐
月亮邮递员6168 分钟前
Markdown语法总结
开发语言·前端·javascript
printfLILEI8 分钟前
php中的类与对象以及反序列化
linux·开发语言·php
曹牧9 分钟前
C#:主线程能够捕获到子线程中的异常
开发语言·数据库·c#
代码中介商9 分钟前
深入解析STL中的stack、queue与priority_queue
开发语言·c++
彦为君14 分钟前
JavaSE-07-异常机制
java·开发语言·后端·python·spring
OxyTheCrack30 分钟前
【Golang】简述make与new内置函数以及两者的区别
开发语言·golang
适应规律34 分钟前
【无标题】
人工智能·python·算法
Rain50940 分钟前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
蒟蒻的贤43 分钟前
关于文法G2算符优先分析的一个坑
算法
变量未定义~1 小时前
单调栈、单调队列(模板)、子矩阵、连通块中点的数量、堆箱子(4星)
算法