Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача двумерного массива в функцию 
:(
    Опции темы
Negent
  Дата 22.6.2014, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.12.2011
Где: Симферополь

Репутация: нет
Всего: нет



Как я знаю, имя массива и указателя тождественны в С++. Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой... Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
Вот код:
Код

#include "stdafx.h"
#include <iostream>

using namespace std;

const int size1 = 3;
const int size2 = 4;
int arr[size1][size2] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    
void arr_fun (int arr[][size2], int size1);

void main ()
{
    arr_fun (arr[][size2], size1);
    system ("pause");
}
void arr_fun (int arr[][size2], size1)
{
    for (int i=0; i<size1; i++)
    {
        for (int j=0; j<size2; j++)
        {
    cout<<"arr["<<i<<"]: "<<arr[i][j]<<endl;
        }
    }
}

Хотя бы дайте общие понятия по логике передачи адреса двух- и более мерного массива в функцию, а дальше, я сам попробую написать =)
PM MAIL WWW ICQ Skype   Вверх
feodorv
Дата 23.6.2014, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Как-то так:
Код

#include <iostream>

using namespace std;

const int size1 = 3;
const int size2 = 4;

int arr[size1][size2] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

void arr_fun ( int arr[size1][size2] );

void main ()
{
    arr_fun ( arr);
    system ("pause");
}
void arr_fun ( int arr[size1][size2] )
{
    for (int i=0; i<size1; i++)
    {
        for (int j=0; j<size2; j++)
        {
    cout<<"arr["<<i<<","<<j<<"]: "<<arr[i][j]<<endl;
        }
    }
}

Это как раз для случая, когда размеры массива заранее известны:
Цитата(Negent @  23.6.2014,  00:37 Найти цитируемый пост)
const int size1 = 3;
const int size2 = 4;

А если же они заранее неизвестны, то нужно действовать иначе...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Negent
  Дата 23.6.2014, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.12.2011
Где: Симферополь

Репутация: нет
Всего: нет



Спасибо! =)

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

#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;
        }
    }
}


Наверное, нужно пересмотреть методику создания самого массива =)
PM MAIL WWW ICQ Skype   Вверх
Нэраварин
Дата 23.6.2014, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Вообщем в С и С++ с многомерными массивами полный пздц и срань господняя :-(
При создании многомерного статического массива, вы обязаны указывать за ранее все последующие размерности, кроме первой т.е. Array[][2][5];

Если же вы не можете знать за ранее размер массива, то таки да:
Цитата (Negent )

   нужно пересмотреть методику создания самого массива
   

и создавать массив динамически, (но с динамическими массивами ещё столько дерьма хлебнёшь пока научишься с ними управляться...) например так:
Код

#include "stdafx.h"
#include <iostream>
using namespace std;

void arr_fun (int **arr, int size1, int size2);

int main ()
{
    int size1;
    int size2;
    
    cout << "Enter size of array! \nFor example arr[size1][size2]" << endl;
    cin >> size1 ;
        cout << "arr[" <<  size1 << "]"  << "[size2]" << endl;
    cin    >> size2;
        cout << "arr[" <<  size1 << "]"  << "[" << size2 << "]" << endl;
        cout << endl;
    
    int ** arr = new int * [size1];//Где size1 - кол-во строк в массиве
    for (int i = 0; i < size1; i++)
    {
        arr[i] = new int [size2];//Где size2 - кол-во столбцов в массиве
        
         for(int j = 0; j < size2; j++)
         {
            arr[i][j] = j;
         }
    
    }
    
    arr_fun (arr, size1, size2);

    delete [] arr;//Удаление динамически выделенного массива

    system("pause");
   return 0;
}

void arr_fun (int **arr, int size1, int size2)
{
    for (int i=0; i<size1; i++)
    {
        for (int j=0; j<size2; j++)
        {
           cout<<"arr["<<i<<"]: "<<arr[i][j]<<endl;
        }
    }
}


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.