Важная информация
Показано с 1 по 3 из 3

Тема: Передача двумерного массива в функцию

  1. #1 Передача двумерного массива в функцию 
    Новичок
    Регистрация
    20.06.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Как я знаю, имя массива и указателя тождественны в С++. Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой... Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
    Вот код:
    C++ Code:
    1. #include "stdafx.h"
    2. #include <iostream>
    3.  
    4. using namespace std;
    5.  
    6. const int size1 = 3;
    7. const int size2 = 4;
    8. int arr[size1][size2] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    9.  
    10. void arr_fun (int arr[][size2], int size1);
    11.  
    12. void main ()
    13. {
    14. arr_fun (arr[][size2], size1);
    15. system ("pause");
    16. }
    17. void arr_fun (int arr[][size2], size1)
    18. {
    19. for (int i=0; i<size1; i++)
    20. {
    21. for (int j=0; j<size2; j++)
    22. {
    23. cout<<"arr["<<i<<"]: "<<arr[i][j]<<endl;
    24. }
    25. }
    26. }

    Хотя бы дайте общие понятия по логике передачи адреса двух- и более мерного массива в функцию, а дальше, я сам попробую написать =)
    Ответить с цитированием  
     

  2. #2  
    Новичок
    Регистрация
    20.06.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Спасибо! =)

    Как ни крутился, всё равно без глобальных переменных обойтись не удалось:
    Код cpp:
    #include "stdafx.h"
    #include <iostream>
     
    using namespace std;
     
    const int size2 = 4;
     
    void show_arr (int arr[][size2], int);
     
    void main ()
    {
        static const int size1 = 3;
        int arr[size1][size2] = {{1,2,3,4},{4,5,6,7},{7,8,9,0}};
        show_arr (arr, size1);
        system ("pause");
    }
    void show_arr (int arr[][size2], int size1)
    {
        for (int i=0; i<size1; i++)
        {
            for (int j=0; j<size2; j++)
            {
                cout<<"Array["<<i+1<<"]: "<<arr[i][j]<<endl;
            }
        }
    }

    Наверное, нужно пересмотреть методику создания самого массива =)
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    создавай массив через new - проблем будет меньше.

    Я не уверен что
    int arr[size1][size2] - это int** поэтому врядли получится передать его по указателю

    Не уверен, т.к. второй вариант (int **) это массив указателей, это не очень оптимально по памяти да и ваще фрагментирует.

    Я думаю что arr[size1][size2] компилятором по умолчанию оптимизируется и располагается в памяти примерно как одномерный массив (массива указателей ваще нет). Надо посмотреть что в стандарте написано, я не смотрел.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 08.12.2013, 13:03
  2. Передача пакетов данных?
    от Aleksandr-dr в разделе Общие вопросы web-разработки
    Ответов: 0
    Последнее сообщение: 22.10.2013, 22:08
  3. Невозможно вызвать функцию
    от SMB в разделе QBasic
    Ответов: 3
    Последнее сообщение: 13.05.2012, 15:48
  4. 2 одномерных массива
    от оля в разделе Turbo Pascal
    Ответов: 3
    Последнее сообщение: 16.12.2011, 13:35
  5. Ответов: 1
    Последнее сообщение: 09.11.2011, 22:46
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •