私はマイナーなミスを無視してください、ライブラリのを含む他の正式な(コンパイルのため、このコードではありません)(ツリーを実装する)は、このようなコードの一部この関数を参照によって呼び出す必要があるのはなぜですか?
struct Node
{
int val;
struct node* left,*right;
Node(int x){
val=x;
left=right=NULL;
}
};
void insert(Node* &h,int val){
if(h==NULL){
h=new Node(val);
return;
}
if(h->val > val){
insert(h->left,val);
}
else {
insert(h->right,val);
}
}
void temp(Node* h,int val){ // Node* h doesn't seem to work but
// Node*& h does!!!
insert(h,val);
}
int main() {
struct Node* R=NULL;
for(int i=0;i<5;i++){
cin>>x;
temp(R,x);
}
return 0;
}
を持っています。
私の質問はです: - 記載されている行の参照によってアドレスが渡される必要があるのはなぜですか?
私のポイント:永久になぜしないことによって、それを変更された関数を挿入するためのリファレンスを私は一時機能にメインからのルートのアドレスを送信していますし、その後一時機能は、でinsert関数にそのアドレスを送信していますルートのアドレスはここで変わる?そして、実際にここでどのアドレスが変更されているのかは間違いですか?
にコンパイラによって作成された一時変数を渡しています。それ以外の場合はできません。 –
は 'traverse'は' temp'とされています –
@ M.Mそれは残念です。編集されました! – Dofenshmirtz