2016-11-07 4 views
1

がリンクリストにノードを追加し、addArrarrに要素を追加した構造ポインタとポインタが

struct Person{ 
    Person(int i):id(i){}; 
    Person * next; 
    int id; 
}; 

class Test{ 
public: 
    void addList(Person *&f , Person *&l , int i){ 

     Person *tmp = new Person(i); 
     if(f == nullptr){ 

      f = tmp; 
      l = tmp; 
      return; 
     } 

     first -> next = tmp; 
     last = tmp; 
    } 
    void addArr(int *arr , int i){ 
     arr[index++] = i; 
    } 
    void print(){ 
     for(int i = 0; i < index; i ++) 
      cout << arr[i] << " "; 
     cout << endl; 
    } 
    Person *first = nullptr; 
    Person *last = nullptr; 
    int index = 0; 
    int *arr = new int[10]; 
}; 

機能addListを有する基準にします。 私の質問は、ポインタと参照ポインタです。

Iを基準にポインタを渡す必要

void addList(Person *&f , Person *&l , int i){ 

    Person *tmp = new Person(i); 
    if(f == nullptr){ 

     f = tmp; 
     l = tmp; 
     return; 
    } 

    first -> next = tmp; 
    last = tmp; 
} 

。それ以外の場合、ポインタのローカルコピーは外側ではなく変更されます。私はコンパイラが次のようなものを作成すると仮定します

Person *temporary = new Person(*f); 

しかし、私は参照によって配列を渡す必要はありませんか? 私はこの事実によってかなり混乱しています。

答えて

1

しかし、私は参照によって配列を渡す必要はありませんか?

この場合には、addList機能で参照することによって、あなたのPersonポインタを渡すことによって、あなたは、ポインタ自体を変更できるわけではありません。つまり、ポインタ」のように、別のアドレス「」を使用してください。これは、参照によって渡されたので可能です。

addArr関数では、配列自体へのポインタを変更していません。むしろ、あなたが指しているデータを変更しています。 "データを指して、別の値" "を使用してください。このデータarrは、機能の範囲外の同じデータです。

いいえ、あなたは参照によって配列を渡す必要はありません。

+0

最初の/最後の要素がすでに最初の要素を指している場合は、参照なしでポインタを渡すことができますか? –

+0

はい、できます。ポインター自体を変更したい場合は、参照(またはポインターへのポインター)でポインターを渡す必要があります。 –

関連する問題