Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/177: Рейтинг темы: голосов - 177, средняя оценка - 4.82
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
1

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

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

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

C++
1
2
3
void function(int*); // прототип функции
void function(int* pmassiv) {} // определение функции
function(massiv); //вызов функции
а как эти три строчки выглядят если надо вернуть многомерный массив
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2009, 22:01
Ответы с готовыми решениями:

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

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

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

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

24
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.09.2009, 00:52 21
Author24 — интернет-сервис помощи студентам
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
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
02.09.2009, 00:54 22
odip,
А ты начал из какого-то талмуда фразы приводить с этим "before"
а-ха-ха, жжешь. :LOOOOOOL

Отжиги пользователей нашего форума
0
556 / 510 / 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
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
02.09.2009, 01:39  [ТС] 24
novi4ok
отлично спасибо то что надо все понятно просто и работает как надо
то есть выходит если в одномерном масиве заранее определено количество элементов то никакие указатели или ссылки не нужны чтобы изменить такой массив ?

Rififi
твой код тоже заработал только непонятно как написать прототип функции в хедере
const int (&f())[10][10];
вроде неподходит имя функции не должно быть в прототипе
а скажем если написать
(const int&())[10][10];
то компилятор выдает ошибку
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 15:08
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru