J.dd
J.dd

Reputation: 157

Pointers and pointers to reference

Having a structure

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

function addList add node into linked list and addArr adds element into arr. My question is about pointer and reference pointer.

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

I need to pass pointer as reference. Otherwise , the local copy of pointer would be changed not outer. I assume compilator creates something like

Person *temporary = new Person(*f);

But would I not have to pass array by reference? I am quite confused by this fact.

Upvotes: 1

Views: 65

Answers (1)

Michael Kissner
Michael Kissner

Reputation: 241

But would i do not have to pass array by reference?

Not in this case, by passing your Person pointer by reference in the addList function, you are able to alter the pointer itself. That is like saying, "Pointer, use a different address". This is possible, as it was passed by reference.

Whereas in your addArr function, you are not altering the pointer to the array itself. Rather, you are altering the data that is pointed to. "Pointed to data, use a different value". This data arr is pointing to is the same data outside the scope of the function.

So, no, you don't have to pass the array by reference.

Upvotes: 1

Related Questions