массивы всегда передаются по ссылке из-за своей указательной природы. но! если одномерный массив можно передать как написав int *array, так и int array[], то n-мерный статический массив нельзя передать, не указав размеры n-1 его измерений, а в памяти он все равно выглядит как указатель на одномерный массив. я не пробовал, но может сработает шаблон:
Code:
template<int m, int n> void foo(int array[m][n])
{
// код функции
}