C语言函数传参有关问题,传地址
C语言函数传参问题,传地址?
如下:我想看到打印的结果,但是每次传入PreOrder(T)都是空值,要怎么修改才能实现从函数我在PreOrder()函数中打印结果乃?
typedef struct tree
{
ElemType data;
struct tree * lchild;
struct tree * rchild;
unsigned int isOut; //专为后序遍历设置的,0为不需要被输出,1为需要被输出
}TreeNode,*Tree;
void CreateTree(Tree* t);
void PreOrder(Tree t);
int main()
{
Tree T;
PreOrder(T);
}
void CreateTree( Tree* t )
{
char ch;
Tree tre = *t;
//tre = *t;
scanf("%c",&ch);
if ( ch == '#' )
tre = NULL;
else
{
tre = (Tree)malloc(sizeof(TreeNode));
if ( !tre )
{
printf("分配内存出错") ;
return ;
}
tre->data = ch;
CreateTree(&(tre->lchild));
CreateTree(&(tre->rchild));
}
}
void PreOrder( Tree t )
{
//Tree tt = t;
if ( t )
{
printf("%c",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
------解决方案--------------------
前面几楼都被楼主恶劣的编程风格骗了,Tree是指针啊!声明成pTree就没歧义了
问题很明显,
pTree ptre=*t;
ptre=...malloc...;
ptre此时就跟*t毫无关系了
所以最后要加上
*t=ptre
如下:我想看到打印的结果,但是每次传入PreOrder(T)都是空值,要怎么修改才能实现从函数我在PreOrder()函数中打印结果乃?
typedef struct tree
{
ElemType data;
struct tree * lchild;
struct tree * rchild;
unsigned int isOut; //专为后序遍历设置的,0为不需要被输出,1为需要被输出
}TreeNode,*Tree;
void CreateTree(Tree* t);
void PreOrder(Tree t);
int main()
{
Tree T;
PreOrder(T);
}
void CreateTree( Tree* t )
{
char ch;
Tree tre = *t;
//tre = *t;
scanf("%c",&ch);
if ( ch == '#' )
tre = NULL;
else
{
tre = (Tree)malloc(sizeof(TreeNode));
if ( !tre )
{
printf("分配内存出错") ;
return ;
}
tre->data = ch;
CreateTree(&(tre->lchild));
CreateTree(&(tre->rchild));
}
}
void PreOrder( Tree t )
{
//Tree tt = t;
if ( t )
{
printf("%c",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
------解决方案--------------------
前面几楼都被楼主恶劣的编程风格骗了,Tree是指针啊!声明成pTree就没歧义了
问题很明显,
pTree ptre=*t;
ptre=...malloc...;
ptre此时就跟*t毫无关系了
所以最后要加上
*t=ptre