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

相关推荐
不会c嘎嘎14 小时前
算法百练,直击OFFER -- day5
c++·算法
搬砖ing换来金砖14 小时前
Python入门-Task02
开发语言·python
雨中散步撒哈拉14 小时前
17、做中学 | 初三下期 Golang文件操作
开发语言·后端·golang
序属秋秋秋14 小时前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
Aileen_0v014 小时前
【Gemini3.0的国内use教程】
android·人工智能·算法·开源·mariadb
CoderYanger14 小时前
C.滑动窗口——1423. 可获得的最大点数
java·开发语言·算法·leetcode·1024程序员节
全栈陈序员15 小时前
【Python】基础语法入门(九)—— 代码规范、调试技巧与性能初探
开发语言·python·代码规范
乌萨奇也要立志学C++15 小时前
【洛谷】二分查找专题 告别二分死循环!模板 + 细节 + 实战
c++·算法
合作小小程序员小小店15 小时前
图书管理系统,基于winform+sql sever,开发语言c#,数据库mysql
开发语言·数据库·sql·microsoft·c#
Yue丶越15 小时前
【C语言】数据在内存中的存储
c语言·开发语言·网络