Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив и получить результат. Тупо возвращать как результат указатель он почему-то не хочет. Кто что может что-нить подсказать?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2008, 04:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача динамического массива в функцию (C++):

Передача динамического массива в функцию - C++
void create_matrix(float **matr,float * mass,int n1); ....................................................................... void...

Передача динамического массива в функцию - C++
Скажите пожалуйста, почему при передаче динамического массива в функцию, адрес локальной переменной (b) отличается от адреса исходной...

Передача динамического массива в функцию - C++
Нужно передать динамический массив в функцию, описав как ссылку (&p). Но я не понимаю, как к нему обращаться в функции.

Передача динамического массива в функцию - C++
Помогите разобраться, не могу понять где ошибка. Отлаживал, программа "вываливается" при вызове функции освобождения памяти #include...

Передача динамического массива в функцию - C++
Добрый вечер! Пытаюсь передать динамический массив a с размером n в функцию ii, изменить его, вернуть и вывести. Но выводятся какие-то...

Передача динамического массива в функцию - C++
извините мб глупый вопрос но не знаю как передать в функцию свой массив в 2 примере( в 1 примере все норм работает. void...

13
Lord_Voodoo
Супер-модератор
8594 / 2210 / 61
Регистрация: 07.03.2007
Сообщений: 10,970
Завершенные тесты: 1
21.11.2008, 09:27 #2
ка вариант используй три параметра - два указателя на ходные данные, и один - как выходной, потому что при передаче в функцию параметра по указателю позволяет его изменять и изменения будут переданы в основную функцию, т.е. сохраняться при дальнейшем выполнении... мутное что-то сказал...
0
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
21.11.2008, 09:57 #3
Что-то я не понял... Указатель на что тебе нужно возвращать... Да и как ты создаешь тот указатель, который возвращаешь???
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
21.11.2008, 20:04 #4
Не возможно создать двухмерный динамический массив. Компилятор тебя пошлет.
0
Жестянка
сцуко киборг
103 / 30 / 2
Регистрация: 11.09.2008
Сообщений: 193
21.11.2008, 20:23 #5
Как вариант можешь создать класс, содержащий массив. И его передавать куда надо.
Тем более, что "динамический двумерный массив" всёравно, как верно заметил Spo1ler, реализовать "влоб" невозможно.
0
Feuer
73 / 73 / 1
Регистрация: 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-столбцов
1
Жестянка
сцуко киборг
103 / 30 / 2
Регистрация: 11.09.2008
Сообщений: 193
21.11.2008, 22:14 #7
Если так, то ничего возвращать не надо. Массив передается в подпрограмму "в оригинале", и все изменения в подпрограмме будут отражаться на нем и так. Тем более, функция типа void в принципе ничего не должна возвращать т.е. что бы ты не написал после return, компилятор будет ругаться.

А так, как написанно - по-моему правильно. Ничего изменять не надо.
0
Мегатрон
нубик программист)
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];
}
вот так будет выглядеть функция двухмерного динамического массива
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
18.05.2009, 18:51 #9
A_etot_ne_zanyat,
У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив
Сие в принципе невозможно, т.к. в Си нет динамических массивов.
В С++ можно заюзать класс std::vector, но препод тебе скорее всего не разрешит (они обычно любят студням гемора подкинуть Ж)
А для остального подойдут предложенные здесь варианты двойных указателей.
0
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
18.05.2009, 19:14 #10
Мегатрон, этот код не правильный...
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?

Добавлено через 8 минут 16 секунд
Посмотри пост Feuer, он правилен
0
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
19.05.2009, 00:08 #11
И зачем создавать в функции двумерный массив, если он должен в фуекцию передаваться?
тоесть функция не может внутри себя создавать такой массив?
0
ISergey
Maniac
Эксперт С++
1379 / 890 / 54
Регистрация: 02.01.2009
Сообщений: 2,677
Записей в блоге: 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;
}
1
Мегатрон
нубик программист)
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 столбцов,а как же со строками?
0
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
19.05.2009, 09:47 #14
Мегатрон, в функции можно делать что угодно, и создавать динамические массивы тоже, просто по условию задачи массив уже есть и его нужно передать в функцию, а не создавать там
0
19.05.2009, 09:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2009, 09:47
Привет! Вот еще темы с ответами:

Передача в функцию динамического массива - C++
Всем привет. Есть, например, функция, работающая с динамическим массивом. Допустим я заполняю этот массив нулями. Далее я передаю его в...

Передача динамического массива строк в функцию - C++
что не так? программа проверяет правильность скобок для каждой строки #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; ...

Передача динамического двухмерного массива в функцию - C++
Всем добрый вечер. Я понимаю, что эта тема поднималась не раз, но хочу еще раз спросить т.к. конечного решения так нигде и нет. Вот...

Передача динамического массива структур в функцию - C++
Доброго времени суток:) Имеется входной файл,который представлен в виде пар через запятую (010)-(110),(001)-(100),... надо загнать его...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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