Во-первых, вы не можете передать массив по значению в том смысле, что сделана копия массива. Если вам нужна эта функциональность, используйте std::vector
или boost::array
.
Обычно указатель на первый элемент передается по значению. В этом процессе размер массива теряется и должен передаваться отдельно. Следующие подписи эквивалентны:
void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size); // the 7 is ignored in this context!
Если вы хотите передать по ссылке, размер является частью типа:
void by_reference(int (&a)[7]); // only arrays of size 7 can be passed here!
Часто вы комбинируете передачу по ссылке с шаблонами, поэтому вы можете использовать функцию с различными статически известными размерами:
template<size_t size>
void by_reference(int (&a)[size]);
Надеюсь, это поможет.