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

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

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

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

C++
1
2
3
void function(int*); // прототип функции
void function(int* pmassiv) {} // определение функции
function(massiv); //вызов функции
а как эти три строчки выглядят если надо вернуть многомерный массив
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2009, 22:01
Ответы с готовыми решениями:

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

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

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

24
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.09.2009, 00:52
Студворк — интернет-сервис помощи студентам
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
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
02.09.2009, 00:54
odip,
А ты начал из какого-то талмуда фразы приводить с этим "before"
а-ха-ха, жжешь. :LOOOOOOL

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

Rififi
твой код тоже заработал только непонятно как написать прототип функции в хедере
const int (&f())[10][10];
вроде неподходит имя функции не должно быть в прототипе
а скажем если написать
(const int&())[10][10];
то компилятор выдает ошибку
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
21.02.2017, 15:08
Да бы не плодить темы. Есть двумерный динамический массив, как вернуть значение массива, что бы после передать в другую функцию.
Функция:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2017, 15:08
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru