2013-12-03 4 views
0

У меня есть массив массивов, и мне нужно передать его функции. Как мне это сделать?Как передать массив массивов функции?

int mask[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 

Как выглядит подпись функции?

Я думал, что это будет выглядеть следующим образом

void foo(int mask[3][3]) 

или

void foo(int **mask) 

но мне кажется, что я не прав, и я не мог найти пример.

+0

По крайней мере, скажите, как вы думаете, как это будет выглядеть. Мы можем помочь вам оттуда. – 0x499602D2

ответ

3

Наименее удивительным образом передавать массивы в С ++ по ссылке:

void foo(int (&mask)[3][3]); 

Ваш первый попробовать

void foo(int mask[3][3]) 

должно было сработать, но он будет внутренне преобразован в

void foo(int (*mask)[3]) 

с неожиданными последствиями для sizeof и другими вещами, которые нуждаются в "реальном" массив.

Ваша другая идея int** не работает, потому что двумерный размерный массив не совпадает с массивом указателей, хотя нотация a[i][j] одинаково хорошо работает для обоих.

Если вы не хотите делиться контентом с функцией (и видеть изменения, которые она может сделать), то ни одно из указанных выше не поможет. Передача указателя по значению по-прежнему разделяет целевой объект. В этом случае вам нужно поместить массив в другой объект, например std::array<std::array<int,3>,3>

Смежные вопросы