|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.02.2012, 14:45 | #1 |
Пользователь
Регистрация: 04.12.2010
Сообщений: 19
|
Передача 2-мерного массива неопределенной размерности в функцию
Братцы, просветите, пожалуйста.
Пищу функцию для поиска пути по ячейкам. Прототип функции выглядит следующим образом: void CalculatePath(PATH* path,PATH_CELL xcell[][10],int Count) ,где PATH* path - Указатель на массив пути PATH_CELL xcell[][10] - Указатель на заполненый массив описания состояния ячеек поля !!! ТУТ ЗАРЫТА СОБАКА !!! int Count - Размерность массива поля PATH_CELL[Count][Count] Вызывается функция так: ***Глобальные переменные*** ... int cellCount = 10; //размерность поля PATH Path[50]; //массив пути (50, потому что путь не как не превысит 50 шагов, а с динамическим массивом у меня голова пухнет. PATH_CELL PCell[cellCount][cellCount]; //массив описания состояния ячеек поля ... ***main.cpp*** ... CalculatePath(Path,PCell,cellCount) ; ... Чтоб передать функции 2-мерный массив нужно явно указать кол-во столбцов. В данном случае 10. Но хочется сделать функцию универсальной. То есть размерность может быть разная 5х5, 10х10 или 100х100. Как же обойтись без явного объявления размерности? |
06.02.2012, 15:10 | #2 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2AesmaDiv
Цитата:
Код:
пример использования: Код:
ну и да Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 06.02.2012 в 15:26. |
|
06.02.2012, 18:56 | #3 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
К тому, что уже написано, добавлю, что если у вас двумерный массив имеет обе размерности равные между собой, как это в вашем случае для массива PATH_CELL[Count][Count], то вы можете упростить шаблонную функцию и написать ее в виде
template <typename T, size_t N> void h1( T ( * a )[N] ); Например, Код:
То есть, чтобы вы не мучались, в вашем конкретном случае функцию void CalculatePath(PATH* path,PATH_CELL xcell[][10],int Count); можно определить как шаблонную функцию следующего вида template <int Count> void CalculatePath( PATH* path, PATH_CELL ( * xcell )[Count] ); Как видите, даже функция упростилась, так как стало меньше параметров в ее объявлении.
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 06.02.2012 в 19:05. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Произведение элементов массива в функции (передача массива в функцию) (Delphi) | Toxa16 | Помощь студентам | 1 | 23.04.2011 04:42 |
Передача массива в функцию | GladiatoR24 | Общие вопросы C/C++ | 3 | 24.11.2010 22:51 |
Си++. Передача массива в функцию. | Diamond2107 | Помощь студентам | 7 | 03.12.2009 20:15 |
передача массива в функцию | JOFRIF | Общие вопросы C/C++ | 8 | 02.08.2009 12:46 |
Передача массива в функцию | Vistar | Общие вопросы C/C++ | 1 | 27.04.2009 08:08 |