void create(BiTree *T) {
char ch;
scanf("%c",&ch);
if(ch=='#')
*T = NULL;
else {
*T = (BiTree)malloc(sizeof(BiNode));
if(*T) {
(*T)->data = ch;
create(&(*T)->lchild);
create(&(*T)->rchild);
}
else return ;
}
}
上面是正確的代碼
為什麼不能用下面的這片???
void create(BiTree T) {
char ch;
scanf("%c",&ch);
if(ch=='#')
T = NULL;
else {
T = (BiTree)malloc(sizeof(BiNode));
if(T) {
T->data = ch;
create(T->lchild);
create(T->rchild);
}
else return ;
}
}
之前的void create(BiTree T)這裡,T是形式參數傳進去的,在create的子函數裡進行的操作,是對形式參數的操作,子函數結束時就都釋放了,不會返回到主函數
void create(BiTree *T)這裡,用到了指針指向T的地址,相當於對T的地址的操作,是一直有效的
也可以寫成(BiTree *&T)下面都用T
這裡涉及C語言指針的相關知識