2016-11-07 197 views
1

具有這樣的結構指針和指針引用

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添加節點到鏈表和addArr添加元素進入arr。 我的問題是關於指針和引用指針。

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; 
} 

我需要通過指針作爲參考。否則,指針的本地副本將被更改而不是外部。我假設compilator創建類似於

Person *temporary = new Person(*f); 

但我會不必通過引用傳遞數組? 我很困惑這個事實。

回答

1

但我會不必通過引用傳遞數組?

在此情況下,通過在addList函數引用傳遞你的Person指針,你可以改變指針本身。這就像是說,指針,使用不同的地址」。這是可能的,因爲它是通過引用傳遞的。

而你的addArr功能,你沒有改變指向數組本身的指針。相反,你正在改變指向的數據。 指向數據,使用不同的值」。這個數據arr指向的是該函數範圍之外的相同數據。所以,不,你不必通過引用傳遞數組。

+0

因此,如果第一個/最後一個指向第一個元素,我可以只傳遞指針而不參考? –

+0

是的,你可以。如果你想改變指針本身,你只需要通過引用傳遞指針(或者作爲指針指針)。 –