передать многомерный массив с ++ - PullRequest
0 голосов
/ 07 января 2012

Нужно ли ставить «&», когда я передаю 2D-массив в функцию, или 2D-массивы автоматически делают это по ссылке как 1Ds.

void fnc (int& arr[5][5]) {
}

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Если вы действительно хотите передать массив по ссылке, он должен быть:

void fnc(int (&arr)[5][5]);

Без внутренних скобок, как говорит г-н Анубис, вы будете пытаться передать массив ссылок, которыйвряд ли будет полезным.

Обычно можно просто написать

void fnc(int arr[][5]);

(можно написать arr[5][5], но первые 5 игнорируются, что может вызвать путаницу.)

Это передает адрес массива, а не сам массив, который, я думаю, является тем, чего вы пытаетесь достичь.

Вы должны также рассмотреть вектор векторов или другую структуру данных более высокого уровня;у сырых массивов есть много ловушек для неосторожных.

2 голосов
/ 07 января 2012

Он будет передан по значению, если вы не укажете передачу по ссылке &.

Однако массив распадается на указатели, поэтому вы в основном передаете указатель по значениюЭто означает, что память, на которую она указывает, будет одинаковой.

В общих чертах, изменение arr внутри функции приведет к изменению оригинала arr (копия не создается).

Кроме того, 1D-массивы также не передаются «автоматически» по ссылке, это просто кажется, поскольку они распадаются на указатели.

...