Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502

Передача двумерного массива в функцию (void) и обратно

19.10.2014, 18:36. Показов 4425. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такое дело:

определяю в хидере .h:

C++
1
static void InputTwoArray(int** a, int N, int M);
далее в .cpp:

C++
1
2
3
4
5
6
7
8
9
10
void MyMatrixFuncs::InputTwoArray(int** a, int N, int M)
    {
       for(int n = 0; n < N; n++)       
         for(int m = 0; m < M; m++) 
         {
            std::cout << "Введите значение элемента a[" << n << "][" << m << "] -> ";
            std::cin >> a[n][m];
         }
 
    }
в main:

C++
1
2
3
4
5
6
7
8
    MatrixFuncs::MyMatrixFuncs::InputTwoArray((int**)a[n][m], N, M);
    
   for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < m; j++)
        cout << setw(4) << a[n][m] << " ";
    cout << endl;   
    }
как мне из void передавать обратно(как это правильно называется, не помню) значения, которые мы получили от cin

запутался с указателями..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2014, 18:36
Ответы с готовыми решениями:

Передача массива из main() в функцию и обратно
Доброго времени суток, уважаемые форумчане! Пишу на С программку, чтобы отработать на ней передачу массива из main() в функцию и...

Передача двумерного массива в функцию
Не могу передать массив в фунцию int min(int Array) { int min = 0; min = Array; for(int i=0;i&lt;3;i++){ for(int...

Передача двумерного массива в функцию
Подскажите, пожалуйста, почему выдает ошибку и как это можно исправить? Не могу понять.. double Sum4(double (&amp;A),int n) { int...

16
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 18:45
Цитата Сообщение от HanDi Посмотреть сообщение
как мне из void
Где здесь void? Ничего не нужно передавать обратно, массив будет заполнен, выводите. Или не выводит?

Добавлено через 2 минуты
Вызывается так:
C++
1
MatrixFuncs::MyMatrixFuncs::InputTwoArray(a, N, M);
Добавлено через 1 минуту
Надеюсь, память под массив, в main(), выделяется?
1
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 18:48  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Где здесь void?

Цитата Сообщение от HanDi Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
void MyMatrixFuncs::InputTwoArray(int** a, int N, int M)
* * {
* * * *for(int n = 0; n < N; n++) * * * 
* * * * *for(int m = 0; m < M; m++) 
* * * * *{
* * * * * * std::cout << "Введите значение элемента a[" << n << "][" << m << "] -> ";
* * * * * * std::cin >> a[n][m];
* * * * *}
}
Цитата Сообщение от alsav22 Посмотреть сообщение
Ничего не нужно передавать обратно, массив будет заполнен, выводите. Или не выводит?
выводит не те значения

0
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 18:49  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Надеюсь, память под массив, в main(), выделяется?
выделяется естественно

C++
1
2
3
4
    const int n = 10;
    const int m = 10;
 
int a[n][m], N = 10, M = 10;
Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Вызывается так:
так не вызывается, вызывается только так:

Цитата Сообщение от HanDi Посмотреть сообщение
MatrixFuncs::MyMatrixFuncs::InputTwoArra y((int**)a[n][m], N, M);
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 18:50
Код из main() выложите.
1
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 18:52  [ТС]
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
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include "matrix.h"
 
using namespace std;
 
    const int n = 10;
    const int m = 10;
 
int main()
{  
    setlocale(LC_ALL, "RUSSIAN");
    int a[n][m], N = 10, M = 10;
 
    MatrixFuncs::MyMatrixFuncs::InputTwoArray((int**)a[n][m], N, M);
    
   for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < m; j++)
        cout << setw(4) << a[n][m] << " ";
    cout << endl;   
    } 
 
    system("pause");
    return 0;
}
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.10.2014, 18:53
Цитата Сообщение от HanDi Посмотреть сообщение
MatrixFuncs::MyMatrixFuncs::InputTwoArra y((int**)a[n][m], N, M);
Взял элемент a[10][10], который находится за пределами массива, скастовал к int**, передал в функцию под видом указателя на начало. Отстрел всей ноги.
2
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 18:55  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Взял элемент a[10][10], который находится за пределами массива, скастовал к int**, передал в функцию под видом указателя на начало. Отстрел всей ноги.
я плохо работаю с указателями, поэтому и тема создана тут.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 19:01
Вот так создавайте:
C++
1
2
3
    int **a = new int*[n];
    for (int i = 0; i < n; ++i)
        a[i] = new int[m];
Так передавайте:
C++
1
MatrixFuncs::MyMatrixFuncs::InputTwoArray(a, N, M);
Добавлено через 1 минуту
И зачем там N, M? Есть уже n, m.
1
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 19:04  [ТС]
alsav22, сейчас попробую
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 19:10
Цитата Сообщение от alsav22 Посмотреть сообщение
И зачем там N, M? Есть уже n, m.
Хотя, для динамически создаваемого, константы можно убрать.
1
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 19:13  [ТС]
main

Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include "matrix.h"
 
using namespace std;
 
    const int n = 2;
    const int m = 2;
 
int main()
{  
    setlocale(LC_ALL, "RUSSIAN");
  //  int a[n][m], N = 10, M = 10;
  
  int **a = new int*[n];
    for (int i = 0; i < n; ++i)
        a[i] = new int[m];
 
    MatrixFuncs::MyMatrixFuncs::InputTwoArray(a, n, m);
    
   for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < m; j++)
        cout << setw(4) << a[n][m] << " ";
        cout << endl;   
    } 
 
    system("pause");
    return 0;
}




я окончательно запутался
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 19:21
C++
1
2
3
4
5
6
    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < m; j++)
        cout << setw(4) << a[i][j] << " ";
        cout << endl;   
    }
1
 Аватар для HanDi
898 / 345 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
19.10.2014, 19:23  [ТС]
alsav22, спасибо, уже сам додумался, что не те индексы, обращение не туда

можно, пожалуйста, прокомментировать данный участок?

C++
1
2
3
 int **a = new int*[n];
    for (int i = 0; i < n; ++i)
        a[i] = new int[m];
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 19:54
Цитата Сообщение от HanDi Посмотреть сообщение
прокомментировать данный участок
Выделяется память, под массив указателей на int, размером n. Под каждый указатель, из этого массива, выделяется память под массив int, размером m.
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.10.2014, 20:33
Теория по теме:
http://itedu.ru/faq/kak-pereda... massiv-v-c
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2014, 20:51
Цитата Сообщение от alsav22 Посмотреть сообщение
Выделяется память, под массив указателей на int, размером n. Под каждый указатель, из этого массива, выделяется память под массив int, размером m.
Точнее так будет (чтобы не было разных толкований выражения: размер массива):
Выделяется память, под массив указателей на int, из n указателей. Под каждый указатель, из этого массива, выделяется память под массив int, из m int-ов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2014, 20:51
Помогаю со студенческими работами здесь

Передача двумерного массива в функцию
Помогите, пожалуйста, очень нужно.Заранее благодарен. Вот код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main(void) { ...

Передача двумерного массива в функцию
Всем доброго времени суток! В Си, при объявлении двумерного массива, можно было сразу проинициализировать его значения: char...

Передача двумерного массива в функцию
Приветствую всех. Помогите пожалуйста советом. Уже три вечера сижу над одной задачей. Задача такая: 3. Используя функции сформировать...

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

Передача в функцию двумерного массива
Доброго времени суток. Есть двумерный массив, размерностью n на m. Нужно передать его в качестве параметра в функцию 1) обычным способом 2)...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru