Маркер &
имеет много значений, два из которых вы здесь перепутали.Ты не одинок!Как оператор, это означает «адрес», который вам кажется удобным (это взято из C
).Но как спецификатор типа, это означает «ссылка на», что совсем другое.Первое значение:
int x ;
int* p = &x ; // p = address of x (as in C)
Второе значение:
void f (int& x) { // x is a reference to an int -- its address is passed to f
x++ ;
}
...
int y = 99 ;
f (y) ; // After this call, y is equal to 100
В этом примере код эквивалентен
void f (int* x) {
(*x)++ ;
}
...
int y = 99 ;
f (&y) ; // After this call, y is equal to 100
Этот код не выглядит чистым, но это легче понять для C
программистов.
Итак ... объявление функции
void f (int*& p) ;
(как в вашем примере) означает, что f
может изменить значение параметра int*
, передаваемого вызывающей функцией.Ваш пример кода кажется мне немного странным, потому что зачем ему возвращать новое значение array
, если он может изменить параметр напрямую?Но это вопрос стиля, и я научился не обсуждать такие вопросы здесь: -)