Если вы собираетесь передать размер массива, удалите ссылку
void f(int a[])
эквивалентно
void f(int* a)
поэтому копирование не будет выполнено, если это является проблемой.
Если вы хотите взять массив по ссылке, тогда вы ДОЛЖНЫ указать размерность. например,
void f(int (&a)[10])
Естественно, лучшим из двух является третье решение, которое заключается в использовании std :: vector's и передаче их по ссылке, ссылке на const или по значению, если это необходимо. НТН