1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
1

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

09.10.2015, 16:38. Показов 1294. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть такой код (не полностью)

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
#include <iostream>
#include <windows.h>
#include <ctime>
#include <fstream>
 
using namespace std;
const int srtoki = 200000;
const int stolbz = 5;   // 
 
int sozd_mas() //  Создаём функцию по созданию массива
{
int **mas = new int *[srtoki];    // Создаём массив с динамической памятью .
    for (int i=0; i<srtoki; i++)
    {   
        mas[i] = new int[stolbz];
                
        for(int j=0; j<stolbz; j++)
// Ну и так далее. Всё нормально создаётся.
 
// Дальше есть несколько блоков которые проводят расчёты с данным массивом. (Всё нормально работает).
//
// Блок 1.
// Блок 2.
// Блок №...
 
 
int main (int arhc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    sozd_mas();  // Запускаем функцию по созданию массива
 
    system ("pause");
    return 0;
}

Теперь сам вопрос (проблема).
У меня есть блоки кода которые что-то изменяют в массиве (меняют значения массива). Кода становиться очень много и находить каждый блок становиться не удобно.

Я хочу эти блоки переместить в отдельные функции (и эти функции запускать из int main (int arhc, char *argv[]) ) и чтобы они имели доступ к массиву mas[][] (**mas[][]).

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


Заранее буду благодарен за грамотный ответ.
(решение проблемы я интернете я не нашёл)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2015, 16:38
Ответы с готовыми решениями:

Строки с выделением динамической памяти
Привет всем! Помогите решить вот такую задачу: Ввести две строки. Определить совпадение их слов...

Ошибка с выделением динамической памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Vector { private: int...

Заполнить рандомно матрицу с выделением динамической памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include...

Сравнение двух строк с выделением динамической памяти - C++
Подскажите почему не работает код? Ввожу две разные строки и всегда выводит equal. Уже как только...

4
Модератор
Эксперт CЭксперт С++
5148 / 2328 / 339
Регистрация: 20.02.2013
Сообщений: 5,720
Записей в блоге: 20
09.10.2015, 16:40 2
Цитата Сообщение от sdima75 Посмотреть сообщение
и эти функции объявить в int main
ЕМНИП, в С++ функции нельзя объявить внутри других функций, если только Вы не надумали лямбдами пользоваться.
0
1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
09.10.2015, 16:42  [ТС] 3
Запустить из main.
0
Модератор
Эксперт CЭксперт С++
5148 / 2328 / 339
Регистрация: 20.02.2013
Сообщений: 5,720
Записей в блоге: 20
09.10.2015, 16:47 4
Цитата Сообщение от sdima75 Посмотреть сообщение
Как сделать чтоб новые функции могли обращаться к массиву (к элементам массива), сам массив с динамической памятью я не удаляю.
Обычно примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int find_max(int * arr, int arrSize)    // объявление функции find_max()
{
    int max = arr[0];
 
    // some code
 
    return max;
}
 
int main()
{
    const int n = 4;
    int my_array[n] = {11, 22, 33, 44};
    std::cout << find_max(arr, n);    // вызов функции find_max()
 
    // some code
 
    return 0;
}
0
Эксперт .NET
5863 / 4740 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
09.10.2015, 16:54 5
Лучший ответ Сообщение было отмечено sdima75 как решение

Решение

для двухмерного:
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
#include <iostream>
#include <windows.h>
#include <ctime>
#include <fstream>
 
using namespace std;
 
 
int** sozd_mas(int srtoki, int stolbz) //  Создаём функцию по созданию массива
{
int **mas = new int *[srtoki];    // Создаём массив с динамической памятью .
    for (int i=0; i<srtoki; i++)
    {   
        mas[i] = new int[stolbz];
                
        for(int j=0; j<stolbz; j++)
        {
            // вводим
        }
    }
     return mas;
}
 
 
int sum(int** mas, int rows, int columns)
{
    int sum=0;
    for (int i=0; i<rows; i++)
    {   
        for(int j=0; j<columns; j++)
        {
            sum+=*(*(mas+i)+j);
        }
    }
    return sum;
}
 
 
int main (int arhc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    int rows = 200000;
    int columns = 5;   //
    int** arr=sozd_mas(rows, columns);  // Запускаем функцию по созданию массива
    cout << sum(arr, rows, columns);
    system ("pause");
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2015, 16:54
Помогаю со студенческими работами здесь

Удаление объекта, созданного в динамической памяти
Здравствуйте! Подскажите, пожалуйста, правильное решение такой проблемы (возможно, это и не...

Не могу понять причину ошибки (связано с выделением динамической памяти под двумерный массив и ее удаление)
Я студент 1 курса , и выполняя задание столкнулся с проблемой. Вот само задание: Ввести оценки N...

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

Ввод двумерного массива с динамическим выделением памяти
Ребят, пож-та, подскажите, что сделал не так. Для начала нужно просто ввести элементы матрицы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru