求助——关于指针的问题
/*下面的程序是错的,我想问下为什么*/#include <stdio.h>
#include <malloc.h>
/*二叉树的结构定义*/
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
/*下面这两个函数分别是先序建立二叉树,先序输出二叉树*/
void CreateBiTree(BiTree T){
char data;
scanf("%c",&data);
if(data=='^'){
T=0;
}
else{
T=(BiTree)malloc(sizeof(BiTNode));
(T->data)=data;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void Print(BiTree T){
if(T!=0){
printf("%c",T->data);
Print(T->lchild);
Print(T->rchild);
}
else
printf("^");
return;
}
main(){
BiTree T;
CreateBiTree(T);
Print(T);
system ("pause");
}
/*我的疑问是主函数里的T已经是一个指针了,为什么做形参不能修改所指向的内容呢?
为此我专门试了一个程序,结果发现能够修改*/
/*typedef struct Node{
int data;
}Node,*PNode;
void Create(PNode p){
p->data=100;
}
void Print(PNode p){
printf("%d",p->data);
}
main(){
PNode p;
Create(p);
Print(p);
system ("pause");
}
*/
/*下面的正确的,我想问下为什么非要这样才行*/
/*#include <stdio.h>
#include <malloc.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T){
char data;
scanf("%c",&data);
if(data=='^'){
(*T)=0;
}
else{
(*T)=(BiTree)malloc(sizeof(BiTNode));
((*T)->data)=data;
CreateBiTree((*T)->lchild);
CreateBiTree((*T)->rchild);
}
}
void Print(BiTree *T){
if((*T)!=0){
printf("%c",(*T)->data);
Print((*T)->lchild);
Print((*T)->rchild);
}
else
printf("^");
return;
}
main(){
BiTree *T;
CreateBiTree(T);
Print(T);
system ("pause");
}
*/