BiTree&TとBitree TとBitNode*TとT->lchild
1140 ワード
typedef struct BitNode{
int data;
BitNode *lchild,*rchild;
}BitNode,*BiTree;
typedefは別名を取る役割があるので、BitNodeの意味はstruct BitNode{...)、BiTreeの意味はstruct BitNode{...)*です.
BiTree&Tはポインタアドレスを取るという意味で、int&a、aを取るアドレスと同じです.
BitNode*TとBiTree Tは、構造ポインタ変数を定義します.
このような関数があります
int insertBST(BiTree &T, int e) {
BiTree p;
if (!searchBST(T, e, NULL, p)) {
BiTree s = (BiTree)malloc(sizeof(BitNode));
s->data = e;
s->lchild = s->rchild = NULL;
if(!p)
T = s;
else if LT(e, p->data) p->lchild = s;
else p->rchild = s;
return TRUE;
}
else return FLASE;
}
そのパラメータはBiTree&Tで、これはポインタを修正するためで、1つの値を修正するには、そのアドレスを知らなければならないので、ポインタアドレスのアドレスを取るのはint aに似ていて、関数でaを修正するにはint local(int&a)が必要です.int insertBST(BitNode*(&T)、int e)と書くこともできますが、関数のT->lchild、T->rchild、T->dataは何をしていますか?それらはこのTポインタを修正して、あなたのTポインタはずっとNULLで、あなたはそれを(BiTree)malloc(sizeof(Node))この空間を指さしました!!!つまり、このTポインタをずっと修正していると、デバッグ中にTのアドレスが変化していることに気づきます.では、あなたは彼の引用を使うのではないでしょうか.