指针和指针参考

时间:2016-11-07 20:12:05

标签: c++ pointers

有结构

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中。 我的问题是关于指针和引用指针。

in

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 个答案:

答案 0 :(得分:1)

  

但是我不必通过引用传递数组吗?

在这种情况下,通过在Person函数中通过引用传递addList指针,您可以更改指针本身。这就像说,指针,使用不同的地址”。这是可能的,因为它是通过引用传递的。

而在addArr函数中,您并没有改变指向数组本身的指针。相反,您正在改变指向的数据。 指向数据,请使用其他值”。此数据arr指向的是与函数范围之外的数据相同的数据。

所以,不,你不必通过引用传递数组。