Если вы хотите вернуть ссылку на массив из функции, объявление будет выглядеть следующим образом:
// an array
int global[10];
// function returning a reference to an array
int (&f())[10] {
return global;
}
Объявление функции, возвращающей ссылку на массив, выглядит так же, как объявлениепеременной, которая является ссылкой на массив - только после того, как за именем функции следует ()
, который может содержать объявления параметров:
int (&variable)[1][2];
int (&functionA())[1][2];
int (&functionB(int param))[1][2];
Такие объявления можно сделать намного более понятными с помощью typedef:
typedef int array_t[10];
array_t& f() {
return global;
}
Если вы хотите, чтобы это действительно сбивало с толку, вы можете объявить функцию, которая принимает ссылку на массив и также возвращает такую ссылку:
template<int N, int M>
int (&f(int (¶m)[M][N]))[M][N] {
return param;
}
Указатели для массивов работают одинаково, только они используют *
вместо &
.