首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

[已经付上短小易读的代码了]二叉树,关于指针与摘引,提示不能将“BiTree*”类型的值赋给”BiTree“实体。对指针有研究的大神看下呗

2013-11-20 
[已经付上短小易读的代码了]二叉树,关于指针与引用,提示不能将“BiTree*”类型的值赋给”BiTree“实体。对指针

[已经付上短小易读的代码了]二叉树,关于指针与引用,提示不能将“BiTree*”类型的值赋给”BiTree“实体。对指针有研究的大神看下呗
本帖最后由 Evil_Logic 于 2013-11-19 10:05:58 编辑 代码如下。其中"#"是代表空。一开始我用的单纯的指针作为形参,后来发现在函数中malloc后指针仍指向NULL(因为我改变的是指针的指向,而不是内容)。
后来我就想到了使用二级指针,但是在21行提示:不能将“BiTree*”类型的值赋给”BiTree“实体
我觉得*T应该是H的意思啊,仍然还是指针啊,为什么不能赋值啊??
(作业我已经通过函数返回值的方式做好了,但这种方式为什么不行还是不太明白)

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;//分别为结构体和指向结构体的指针
void CreateBiTree(BiTree *T)//接受指针的指针,这时的T指向指针H
{
char ch;
scanf("%c",&ch);
printf("%c@\n",ch);
if(ch=='#')
{
printf("执行T=NULL\n");
*T=NULL;//改变T的内容,即H指向NULL
}
else
{
(*T)=(BiTree*)malloc(sizeof(BiTNode));//改变T的内容,即H指向新的空间
(*T)->data=ch;
printf("执行T->data=ch\n");
CreateBiTree(&(*T)->lchild);//再次把指针的地址传入下次的函数
CreateBiTree(&(*T)->rchild);
}
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
else
{
printf("T不存在!\n");
}
}
int main()
{
BiTree H;//声明一个指针
printf("please input data:");
CreateBiTree(&H);//把指针的地址传入函数
PreOrderTraverse(H);
system("pause");
return 0;
}

[解决办法]
(*T)=(BiTree*)malloc(sizeof(BiTNode));//改变T的内容,即H指向新的空间

修改为:
(*T)=(BiTree)malloc(sizeof(BiTNode));//改变T的内容,即H指向新的空间

或者
(*T)=(BiTNode*)malloc(sizeof(BiTNode));//改变T的内容,即H指向新的空间

热点排行