Как я передаю ссылку на двухмерную антенную решетку к функции?

Для меня пакеты были там по правильному пути, но папки сборки внутри папки пакета не были. Я просто удалил все пакеты, которые, по его словам, отсутствовали, и перестроил решение, и он успешно создал папки сборки и файлы .props. Таким образом, сообщения об ошибках были правильными, сообщив мне, что что-то было пропущено.

25
задан 31 December 2008 в 23:03
поделиться

4 ответа

Если Вы будете знать размер во время компиляции, это сделает это:

//function prototype
void do_something(int (&array)[board_width][board_height]);

Выполнение это с

void do_something(int array[board_width][board_height]);

на самом деле передаст указатель на первый подмассив двумерной матрицы ("board_width", полностью проигнорирован, как с вырожденным случаем наличия только одного размера, когда Вы имеете int array[] принятие указателя), который является, вероятно, не, что Вы хотите (потому что Вы явно попросили ссылку). Таким образом выполнение его со ссылкой, использование sizeof на параметре sizeof array уступят sizeof(int[board_width][board_height]) (как будто Вы сделали бы это на самом аргументе), в то время как выполнение его со вторым методом (объявление параметра как массив, таким образом заставляя компилятор преобразовать его к указателю) уступит sizeof(int(*)[board_height]), таким образом просто sizeof указателя.

36
ответ дан Johannes Schaub - litb 15 October 2019 в 15:24
поделиться

Хотя можно передать ссылку на массив, потому что массивы затухают к указателям в вызовах функции, когда они не связываются с параметры ссылки, и можно использовать указатели точно так же, как массивы, более распространено использовать массивы в вызовах функции как это:

void ModifyArray( int arr[][80] ); 

или эквивалентно

void ModifyArray( int (*arr)[80] );

Внутренняя часть функция, прибытие может использоваться почти таким же способом, как будто объявление функции было:

void ModifyArray( int (&arr)[80][80] );

единственный случай, где это не содержит, - когда для вызванной функции нужна статически проверенная гарантия размера первого индекса массива.

23
ответ дан CB Bailey 15 October 2019 в 15:24
поделиться

Вы могли бы хотеть попробовать cdecl или C++ decl .

% c++decl
c++decl> declare i as reference to array 8 of array 12 of int
int (&i)[8][12]
c++decl> explain int (&i)[8][12]
declare i as reference to array 8 of array 12 of int
c++decl> exit
6
ответ дан Mr.Ree 15 October 2019 в 15:24
поделиться

Я думаю, что это - то, что Вы хотите:

void do_something(int array[board_width][board_height]);

Вы не можете передать массив ссылок на функцию.

0
ответ дан Jeremy Ruten 15 October 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: