2014-02-20 5 views
2
class parent 
{ 
    protected: 
     int a; 
}; 

class child : public parent 
{ 
    public: 
    void addOne(parent * &); 
}; 

void child::addOne(parent * &parentClass) 
{ 
    a=5; 
    } 

int main() 
{ 
    parent a; 
    child b; 
    parent* ap = &a; 
    b.addOne(ap); 
} 

В приведенном выше примере * и & споют и используются в качестве параметра функции, как *&, любой орган может объяснить, что это значит это ссылка или указатель?Что смысл * и использовать вместе

+0

[и звездочка и амперсанд в параметре C++] (http://stackoverflow.com/questions/14314640/both-asterisk-and-ampersand-in-a-parameter-c/14314703#14314703) –

ответ

3

Это ссылка на указатель.

За кулисами компилятор передает адрес указателя.

Хотя ваш пример не показывает, ссылки, как правило, используются для

  • изменения передаваемого параметра (в данном случае указатель).
  • , чтобы сохранить ненужную копию объекта (если используется ссылка на константу).
3

Если вам необходимо изменить указатель, а не только данные, на который указывает его, вы должны передать ссылку на указатель. Как и любая другая переменная.

1

Это означает ссылку на переменную-указатель.

Вы можете передать переменную типа указателя, а метод может иметь значение переменной. Это означает, что вы можете изменить то, на что указывает оригинальный указатель.

0

это называется ref-to-pointer. Это похоже на ptr-to-ptr, но есть некоторые отличия, как ref vs ptr в языке C++.

Смежные вопросы