Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 141, средняя оценка - 4.79
A_etot_ne_zanyat
Сообщений: n/a
#1

Передача динамического массива в функцию - C++

21.11.2008, 04:31. Просмотров 19167. Ответов 13
Метки нет (Все метки)

У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив и получить результат. Тупо возвращать как результат указатель он почему-то не хочет. Кто что может что-нить подсказать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2008, 04:31     Передача динамического массива в функцию
Посмотрите здесь:
Передача динамического массива в функцию C++
Передача в функцию динамического массива C++
Передача динамического массива в функцию C++
Передача динамического массива в функцию C++
C++ Передача динамического массива в функцию
C++ Передача динамического массива в функцию
Передача динамического массива строк в функцию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
8580 / 2180 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
21.11.2008, 09:27     Передача динамического массива в функцию #2
ка вариант используй три параметра - два указателя на ходные данные, и один - как выходной, потому что при передаче в функцию параметра по указателю позволяет его изменять и изменения будут переданы в основную функцию, т.е. сохраняться при дальнейшем выполнении... мутное что-то сказал...
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
21.11.2008, 09:57     Передача динамического массива в функцию #3
Что-то я не понял... Указатель на что тебе нужно возвращать... Да и как ты создаешь тот указатель, который возвращаешь???
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
21.11.2008, 20:04     Передача динамического массива в функцию #4
Не возможно создать двухмерный динамический массив. Компилятор тебя пошлет.
Жестянка
сцуко киборг
102 / 29 / 2
Регистрация: 11.09.2008
Сообщений: 193
21.11.2008, 20:23     Передача динамического массива в функцию #5
Как вариант можешь создать класс, содержащий массив. И его передавать куда надо.
Тем более, что "динамический двумерный массив" всёравно, как верно заметил Spo1ler, реализовать "влоб" невозможно.
Feuer
73 / 73 / 7
Регистрация: 13.10.2008
Сообщений: 144
21.11.2008, 21:19     Передача динамического массива в функцию #6
Ну, не знаю, на сколько это правильно но я делаю так:
//создаем динам. 2-мерный массив
int n=10;
int **arr = new int *[n];
for(int i=0;i<n;i++) arr[i] = new int[n];

//прототип функции прин. этот массив
void myFunction(int **, int rows, int columns);
//где rows-кол. строк, columns-столбцов
Жестянка
сцуко киборг
102 / 29 / 2
Регистрация: 11.09.2008
Сообщений: 193
21.11.2008, 22:14     Передача динамического массива в функцию #7
Если так, то ничего возвращать не надо. Массив передается в подпрограмму "в оригинале", и все изменения в подпрограмме будут отражаться на нем и так. Тем более, функция типа void в принципе ничего не должна возвращать т.е. что бы ты не написал после return, компилятор будет ругаться.

А так, как написанно - по-моему правильно. Ничего изменять не надо.
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
18.05.2009, 18:30     Передача динамического массива в функцию #8
void myFunction(int **, int n, int m)
{
int n=10;
int **arr = new int *[n];
for(int i=0;i<n;i++) arr[i] = new int[n];
}
вот так чтоли динамический массив в функции будет

Добавлено через 5 минут 48 секунд
C++
1
2
3
4
5
6
7
 
void myFunction(int **, int n, int m)
{
                   
int **arr = new int *[n] *[m];
for(int i=0;i<n;i++) arr[i] = new int[n];
}
вот так будет выглядеть функция двухмерного динамического массива
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
18.05.2009, 18:51     Передача динамического массива в функцию #9
A_etot_ne_zanyat,
У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив
Сие в принципе невозможно, т.к. в Си нет динамических массивов.
В С++ можно заюзать класс std::vector, но препод тебе скорее всего не разрешит (они обычно любят студням гемора подкинуть Ж)
А для остального подойдут предложенные здесь варианты двойных указателей.
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
18.05.2009, 19:14     Передача динамического массива в функцию #10
Мегатрон, этот код не правильный...
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?

Добавлено через 8 минут 16 секунд
Посмотри пост Feuer, он правилен
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
19.05.2009, 00:08     Передача динамического массива в функцию #11
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?
тоесть функция не может внутри себя создавать такой массив?
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
19.05.2009, 00:21     Передача динамического массива в функцию #12
Мегатрон, Вот те со старых запасов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
 
template<typename T> inline int arrlen(T *arr){
    return static_cast<int>(_msize(arr)/sizeof(T));
}
 
int **arrCreate(const int row,const int col){
    int **arr = new int*[row];
    for(int i = 0; i < row; ++i)
        arr[i] = new int[col];
 
    return arr;
}
void arrFree(int **arr){
    int lenrow = arrlen(arr);
    for(int i = 0; i < lenrow; ++i)
        delete[] arr[i];
    delete[] arr;
}
void arrInput(int **arr){
    int lenrow  = arrlen(arr);
    int lencol  = arrlen(arr[0]);
    for(int i = 0; i < lenrow; ++i)
        for(int j = 0; j < lencol; ++j){
            std::cout<<"arr["<<i<<"]"<<"["<<j<<"] = ";
            std::cin>>arr[i][j];
        }
 
}
void arrOut(int **arr){
    int lenrow  = arrlen(arr);
    int lencol  = arrlen(arr[0]);
    for(int i = 0; i < lenrow; ++i){
        std::cout<<"[ ";
        for(int j = 0; j < lencol; ++j)
            std::cout<<arr[i][j]<<" ";
        std::cout<<"]"<<std::endl;
    }
}
int main()
{
    const int r = 3;
    const int c = 3;
 
    int **arr = arrCreate(r,c);
    arrInput(arr);
    arrOut(arr);
    arrFree(arr);
    return 0;
}
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
19.05.2009, 07:09     Передача динамического массива в функцию #13
int n;
cin >> n;
int **arr = new int *[n];
for(int i=0;i<n;i++) arr[i] = new int[n];
так тут получается задаем n столбцов,а как же со строками?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2009, 09:47     Передача динамического массива в функцию
Еще ссылки по теме:
C++ Передача динамического массива структур в функцию
C++ Передача динамического массива структур в функцию
Передача динамического двухмерного массива в функцию C++
Передача динамического двумерного массива в функцию C++
C++ Передача двумерного динамического массива в функцию(объяснение)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
19.05.2009, 09:47     Передача динамического массива в функцию #14
Мегатрон, в функции можно делать что угодно, и создавать динамические массивы тоже, просто по условию задачи массив уже есть и его нужно передать в функцию, а не создавать там
Yandex
Объявления
19.05.2009, 09:47     Передача динамического массива в функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru