Мы можем передать ссылку массива на такую функцию, как:
void f(int (&a)[5]);
int x[5];
f(x); //okay
int y[6];
f(y); //error - type of y is not `int (&)[5]`.
Или даже лучше, мы можем написать шаблон функции:
template<size_t N>
void f(int (&a)[N]); //N is size of the array!
int x[5];
f(x); //okay - N becomes 5
int y[6];
f(y); //okay - N becomes 6
Теперь мой вопрос: как вернуть ссылку массива из функции?
Я хочу вернуть массив следующих типов из функции:
int a[N];
int a[M][N];
int (*a)[N];
int (*a)[M][N];
где M
и N
известны во время компиляции!
Каковы общие правила для передачи и возврата ссылки на компиляцию массива в функцию и из нее? Как передать ссылку массива типа int (*a)[M][N]
на функцию?
EDIT:
Adam прокомментировал: int (*a)[N]
не является массивом, это указатель на массив.
Да. Но одно измерение известно во время компиляции! Как мы можем передать эту информацию, которая известна во время компиляции, функции?