Изменить, где указатель указывает внутри функции - PullRequest
5 голосов
/ 26 декабря 2011

У меня есть указатель на объект структуры в C ++.

 node *d=head;

Я хочу передать этот указатель в функцию по ссылке и отредактировать, куда он указывает.Я могу передать его, но он не изменится, куда указывает начальный указатель, а только локальный указатель в функции.Аргументы функции должны быть указателем, верно?И после того, как я могу изменить его, чтобы показать другому объекту той же структуры?

Ответы [ 3 ]

11 голосов
/ 26 декабря 2011

У вас есть два основных варианта: пройти мимо указатель или пройти мимо ссылка .Передача по указателю требует использования указателя на указатель:

void modify_pointer(node **p) {
    *p = new_value;
}

modify_pointer(&d);

Передача по ссылке использует &:

void modify_pointer(node *&p) {
    p = new_value;
}

modify_pointer(d);

Если вы передадите указатель как просто node *d, то изменитеd внутри функции будет изменять только локальную копию, как вы заметили.

3 голосов
/ 26 декабря 2011

Передайте по ссылке:

void foo(node*& headptr)
{
     // change it
     headptr = new node("bla");
     // beware of memory leaks :)
}
1 голос
/ 26 декабря 2011

Передайте node ** в качестве аргумента вашей функции:

// f1 :
node *d = head;

f2(&d);

// f2:
void f2(node **victim) {
    //assign to "*victim"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...