Подтвердить что ты не робот

Как передаются массивы?

Являются ли массивы переданы по умолчанию ref или значением? Спасибо.

4b9b3361

Ответ 1

Они передаются как указатели. Это означает, что вся информация о размере массива теряется. Вам было бы гораздо лучше посоветовать использовать std::vectors, который может быть передан по значению или по ссылке, по вашему выбору, и, следовательно, сохранить всю их информацию.

Здесь приведен пример передачи массива функции. Обратите внимание, что мы должны указать количество элементов конкретно, так как sizeof (p) даст размер указателя.

int add( int * p, int n ) {
   int total = 0;
   for ( int i = 0; i < n; i++ ) {
       total += p[i];
   }
   return total;
}


int main() {
    int a[] = { 1, 7, 42 };
    int n = add( a, 3 );
}

Ответ 2

Во-первых, вы не можете передать массив по значению в том смысле, что сделана копия массива. Если вам нужна эта функциональность, используйте 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]);

Надеюсь, что это поможет.

Ответ 3

Массивы являются специальными: они всегда передаются как указатель на первый элемент массива.