Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача массивов в функции и процедуры, двумерные массивы 
V
    Опции темы
ip127001
Дата 23.2.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



зачем такой гимар с указателями...шаблоны самый удобный способ!

template<typename Type, const int size_i, const int j>
                                 void func(Type (&mas)[size_i][size_j]){}

int main()
{
    int mas[10][10];

      func(mas);
      return 0;
}

--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
JackYF
Дата 24.2.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



ip127001, извини, не понял вообще твоей задумки...

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

гм... вообще неожиданный вариант. Не знаю. Мне не очень нравится. Гораздо понятнее и "принятее"
все-таки передавать размеры в функцию и не мучится.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ip127001
Дата 24.2.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



в теме написанно, что нужно передать двумерный массив...что может быть проще этого?

а размеры передавать..так же для каждой размерности свою фукцию!
только если размерность ограниченна....скажем 3.
ток тогда можно типа этого написать
Код

template<tymename Mas> void func(Mas *array,int i=0,int j=0,int m=0)
{
// тут уже проверять какой массив 1,2,3 мерный.


}
int main()
{
    const int i=10,j=10,m=10;
    int mas[i][j][m];
    int mas1[i][j];
       
       func(mas,i,j,m);
       func(mas1,i,j);   
       return 0;
}

так? иль я что-то не понял?
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Daevaorn
Дата 24.2.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(ip127001 @  24.2.2007,  18:35 Найти цитируемый пост)
так? иль я что-то не понял? 

а как с ним работать внутри функции?
PM MAIL WWW   Вверх
ip127001
Дата 24.2.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



с чем?

если ты про этот пример...то так же как с обычным массивом...
Код

template<typename Type, const int size_i, const int j>
                                 void func(Type (&mas)[size_i][size_j]){
      cout<<mas[0][1];
//выводит 1234

}

int main()
{
    int mas[10][10];
//пример
      mas[0][1]=1234;         
      func(mas);
      return 0;
}

--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Daevaorn
Дата 24.2.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(ip127001 @  24.2.2007,  18:35 Найти цитируемый пост)
template<tymename Mas> void func(Mas *array,int i=0,int j=0,int m=0)

Цитата(ip127001 @  24.2.2007,  23:43 Найти цитируемый пост)
template<typename Type, const int size_i, const int j>
                                 void func(Type (&mas)[size_i][size_j]){

немного отличаетсяsmile
PM MAIL WWW   Вверх
ip127001
Дата 24.2.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



то что разное это я знаю......при том чушь я какую-то написал 2 раз...пардон...нормально 2 мерный массив передавать указателю...стыдно, стыдно smile:
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
tonjo
Дата 24.2.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Цитата(TaNK @  21.12.2006,  13:48 Найти цитируемый пост)
int matr(int n, int m ,int **uc); // Прототип
===
int **pi,y;
pi = new int *[nn];
       for (i=0; i<nn; i++)
       pi[i] = new int [mm];
       y=matr(nn,mm,pi);// вот тут и передаем 


При работе с двумерными массивами работаю именно так, но вот при создании таким способом нескольких массивов больших размеров [32][256]  типа int и double, программа вылетает с сообщением, что больше она не может создать ничего с помощью new (2-3 массива создает лекго!). Пишу на C++.NET
 Вопрос: кто-нибудь сталкивался с подобным? и ещё вопрос: можно ли ненужные уже массивы удалять из памяти? Использование delete вызывает ошибку памяти. Что делать?
PM MAIL   Вверх
Daevaorn
Дата 24.2.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(tonjo @  25.2.2007,  00:39 Найти цитируемый пост)
При работе с двумерными массивами работаю именно так, но вот при создании таким способом нескольких массивов больших размеров [32][256]  типа int и double, программа вылетает с сообщением, что больше она не может создать ничего с помощью new 

значит где-то "не так" работаешь - портишь кучу. выходишь за пределы или что-то похожее...
Цитата(tonjo @  25.2.2007,  00:39 Найти цитируемый пост)
Использование delete вызывает ошибку памяти. 

по той же причине.
PM MAIL WWW   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.