2016-11-07 163 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

是的,你可以。如果你想改变指针本身,你只需要通过引用传递指针(或者作为指针指针)。 –