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

相关推荐
睡美人的小仙女12711 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
rayufo12 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk12 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
数研小生12 小时前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
芒克芒克12 小时前
LeetCode 题解:除自身以外数组的乘积
算法·leetcode
缺点内向12 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
一起养小猫13 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl99613 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手13 小时前
Python while 循环 极简核心讲解
java·python·算法
@Aurora.13 小时前
优选算法【专题九:哈希表】
算法·哈希算法·散列表