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);
}
}
}
void create(BiTree T) { // T 為值傳遞
...
T = (BiTree)malloc(...); // 修改的是副本
create(T->lchild); // 傳遞未初始化的指針
}
BiTree *T(或 BiTree &T):傳遞指針地址,函數內修改 *T 影響外部實參。BiTree T:值傳遞,函數內 T 為副本,分配內存、賦值均不影響調用者變量。此為 C 語言指針核心概念:「若需在函數內修改指針本身(指向新內存),必須傳遞指針的指針或引用」。