Эта функция была задана несколько раз здесь, но меня интересует конкретный случай. Возможно ли, чтобы размер передаваемого массива определялся дополнительным аргументом?
В качестве примера, скажем, я хочу, чтобы функция печатала двумерный массив. Тем не менее, массив может не иметь одинаковые размеры каждый раз. Было бы идеально, если бы у меня были дополнительные аргументы, определяющие размер этого массива. Я знаю, что я мог бы легко выключить n
для числа здесь по мере необходимости, но если у меня есть более сложные функции с отдельными заголовочными файлами, кажется глупым переходить и редактировать заголовочные файлы каждый раз, когда появляется массив другого размера. Следующие результаты в error: use of parameter 'n' outside function body...
что я понимаю, но хотел бы найти обходной путь. Я тоже пробовал с g++ -std=c++11
но все та же ошибка.
#include <iostream>
using namespace std;
void printArray(int n, int A[][n], int m) {
for(int i=0; i < m; i++){
for(int j=0; j<n; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
}
int main() {
int A[][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};
printArray(3, A, 4);
return 0;
}
Предположительно, это можно сделать с C99 а также упоминается в этот вопрос но я не могу понять, как с C ++.
Это работает:
template<size_t N, size_t M>
void printArray( int(&arr)[M][N] ) {
for(int i=0; i < M; i++){
for(int j=0; j < N; j++) {
std::cout << A[i][j] << " ";
}
std::cout << std::endl;
}
}
если вы готовы поместить код в заголовочный файл. В качестве бонуса он выводит N
а также M
для тебя.