Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/81: Рейтинг темы: голосов - 81, средняя оценка - 4.93
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
#1

Возвращение многомерного массива из функции

01.09.2009, 22:01. Просмотров 14712. Ответов 24
Метки нет (Все метки)

Как вернуть многомерный массив из функции
для обычного массива c использованием указателей это выглядит так

C++
1
2
3
void function(int*); // прототип функции
void function(int* pmassiv) {} // определение функции
function(massiv); //вызов функции
а как эти три строчки выглядят если надо вернуть многомерный массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2009, 22:01
Ответы с готовыми решениями:

Как реализовать передачу массива в функцию и возвращение массива из функции?
Нужно сделать отдельный блок программы в виде функции, которая в качестве...

Возвращение массива из функции
Нужно вернуть массив типа int из функции Как я понимаю сделать это можно...

Возвращение массива из функции
Почему такой код выводит массив корректно. int* Input() { int b = {...

Возвращение массива из функции
Как вернуть массив из функции? double* Zapolnenie(string Name) { if (Name...

Возвращение массива из функции-шаблона
Есть массив int iArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; есть шаблон...

24
Monte-Cristo
2796 / 1382 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.09.2009, 00:52 #21
nill, если непонятно.. делай приблизительно
так
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
#include <iostream>
using namespace std;
 
void zapolnaem(int M[][4], int m, int n);
void print(int M[][4], int m, int n);
 
int main()
{
    const int m = 5; // кол-во строк в массиве
    const int n = 4; // кол-во рядов в массиве
    int A[m][n]; // наш двумерный массив
 
    // заполняем массив
    zapolnaem(A, m, n);
 
    // выводим массив
    print(A, m, n);
 
    system("pause");
    return 0;
}
 
void zapolnaem(int M[][4], int m, int n)
{
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
            M[i][j] = i*j;
}
 
void print(int M[][4], int m, int n)
{
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            cout.width(3);
            cout << M[i][j];
        }
        cout << endl;
    }
}
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
02.09.2009, 00:54 #22
odip,
А ты начал из какого-то талмуда фразы приводить с этим "before"
а-ха-ха, жжешь. :LOOOOOOL

Отжиги пользователей нашего форума
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.09.2009, 01:03 #23
Цитата Сообщение от nill Посмотреть сообщение
Имееться массив с заранее определенным количеством элементов
надо вызвать функцию которая наполнит его данными
то есть если совсем конкретно то создаеться массив
A[5][15] с нулевыми значениями всех элементов потом он передаеться в функцию f(int **A) (столбцы и строки передавать не нужно они не изменяються и известны заранее) после чего я получаю заполненый двумерный массив A

если совсем просто надо передать в функцию двумерный массив A[5][15] c заранее известным количеством элементов и вернуть с одним измененным элементом скажем A[0][0]=100; все больше никаких действий ненужно
тогда пишите так и не заморачивайтесь. будет 100% работать как вы предполагаете:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//////////////
void fff(int a[2][2]){
        a[0][0] = 1;
        a[0][1] = 2;
        a[1][0] = 3;
        a[1][1] = 4;
}
 
/////////////////////////
int main() {
int arrXXX[2][2];
::memset (arrXXX, 0, sizeof (arrXXX));
fff(arrXXX);
в ф-ю на самом деле передастся как аргумент указатель на ваш массив, а компилятор позаботится о том, чтобы вы с индексами не переиграли.
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
02.09.2009, 01:39  [ТС] #24
novi4ok
отлично спасибо то что надо все понятно просто и работает как надо
то есть выходит если в одномерном масиве заранее определено количество элементов то никакие указатели или ссылки не нужны чтобы изменить такой массив ?

Rififi
твой код тоже заработал только непонятно как написать прототип функции в хедере
const int (&f())[10][10];
вроде неподходит имя функции не должно быть в прототипе
а скажем если написать
(const int&())[10][10];
то компилятор выдает ошибку
0
Jman
47 / 47 / 25
Регистрация: 11.10.2015
Сообщений: 575
Завершенные тесты: 4
21.02.2017, 15:08 #25
Да бы не плодить темы. Есть двумерный динамический массив, как вернуть значение массива, что бы после передать в другую функцию.
Функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int task_6_2_DefaultMatrix(int** arr, int rows, int cols)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            arr[i][j] = rand() % 10;
            cout << setw(4) << arr[rows][cols];
        }
    }
 
    return arr;  // Вот тут ругается.
}
main:
C++
1
2
3
4
5
6
7
8
cout << "Введите количество строк и столбцов" << endl;
                cin >> rows >> cols;
                int** ptMass = new int*[rows];
                for (int i = 0; i < rows; i++)
                {
                    ptMass[i] = new int[cols];
                }
                task_6_2_DefaultMatrix(ptMass, rows, cols);
Чет такая конструкция не хочет работать...

Добавлено через 8 минут
И да кстати, я так понимаю, я пытаюсь изменить адрес командой rand. Вылетает исключение: "нарушение прав доступа при чтении по адресу 0xFDFDFE11"

Добавлено через 20 минут
Аааа, туплю.
Пофиксил
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            arr[i][j] = rand() % 10;
            cout << setw(4) << arr[i][j];
        }
    }
0
21.02.2017, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2017, 15:08

Возвращение двумерного массива из функции
int function (int x, const int r, const int c) //работает только если указана...

Возвращение двумерного массива из функции
Здравствуйте, написал пробник, чтобы освоить метод возвращения из функции...

Возвращение из функции массива указателей
Здравствуйте. Мне нужно вернуть из функции массив указателей. Внутри функции...


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

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

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