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

Поиск:

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


Новичок



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

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



Как я знаю, имя массива и указателя тождественны в С++. Из этого следует, что можно инициализировать указатель, а работать с ним, как с именем массива, добавив индекс (квадратный скобки) или смещение к имени массива и круглые скобки со звёздочкой... Но не в этом суть. Я пробовал ввести передачу в функцию двумерного массива (столбы и строки) - не вышло. Очевидно, что где-то вкралась ошибка.
Вот код:
Код cpp:
Код
#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   Вверх
Gimfixwork
Дата 15.9.2014, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Существует несколько способов передачи двумерных массивов: это могут быть двойные указатели, структурированные массивы, представление одномерного массива как двумерного и др.
PM MAIL   Вверх
sQu1rr
Дата 15.9.2014, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gimfixwork @  15.9.2014,  20:33 Найти цитируемый пост)
Существует несколько способов передачи двумерных массивов

привели бы хоть один, что вы, стесняетесь?

Код

#include <iostream>

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 main() {
    arr_fun(arr);
}

void arr_fun(int arr[][size2]) {
    for (int i = 0; i < size1; ++i) {
        for (int j = 0; j < size2; ++j) {
            std::cout << "arr[" << i << ":" << j << "] = " << arr[i][j] << "\n";
        }
    }
}


masinIL, void main() - никогда

И вообще, что так люди боятся спросить англицкий гугл? http://stackoverflow.com/questions/8767166...ray-to-function

Это сообщение отредактировал(а) sQu1rr - 15.9.2014, 21:23
PM MAIL Skype GTalk   Вверх
neonnophibe
Дата 16.9.2014, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот примерно так это можно реализовать...

Код cpp:
Код
 const int size1 = 3;
 const int size2 = 4;
 int arr[size1[size2 = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
 int* arr_ptr[size1 = {arr[0, arr[1, arr[2};

 void arr_func (int* ptr[, int size);

int main(int argc, char* argv[)
{
    arr_func(arr_ptr, size1);
    return 0;
}

 void arr_func (int* ptr[, int size)
 {
     for (int i = 0; i < size; i++)
     {
         for (int j = 0; j < size2; j++)
         {
             int a = ptr[i[j;
             printf("%d, ", a); 
         }
         printf("\n");
     }
 }

PM MAIL   Вверх
xvr
Дата 16.9.2014, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(masinIL @  15.9.2014,  17:16 Найти цитируемый пост)
Как я знаю, имя массива и указателя тождественны в С++.

Не совсем так. В подавляющем большинстве мест имя массива автоматически преобразуется в указатель на его первый (в смысле нулевой) элемент.

В частности, это не работает там, где требуется вычислить размер массива. И в случае 2х (и более) мерных массивов это вылазит в полный рост  smile Многомерные массивы и многомерные указатели - это совсем не одно и тоже (ни в каких контекстах)


PM MAIL   Вверх
tzirechnoy
Дата 16.9.2014, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



У Вас копипаста покорёжылась, с копипастьте заново -- чтобы было понятно, в какую ошыбку Вы вляпались.

Добавлено через 53 секунды
Цитата
привели бы хоть один, что вы, стесняетесь?


Он, вообще-то, привёл цэлых три. То, что Вы их не поняли -- это ужэ вашы проблемы.
PM MAIL   Вверх
sQu1rr
Дата 16.9.2014, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tzirechnoy @  16.9.2014,  14:31 Найти цитируемый пост)
Он, вообще-то, привёл цэлых три.

Назвал

Цитата(tzirechnoy @  16.9.2014,  14:31 Найти цитируемый пост)
То, что Вы их не поняли -- это ужэ вашы проблемы. 

Грубить не обязательно. Вы по всему видимому зашли в этот пост, для того что бы оффтопить
PM MAIL Skype GTalk   Вверх
tzirechnoy
Дата 16.9.2014, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Цитата
Назвал


Что поделать, для людей, общающихся при помощи клавиатур и мониторов -- информацыонные сообщения -- это единственный способ представления вещей друг другу.
А вот то, что Вы не поняли, что имел в виду собеседник -- это именно Вашы проблемы, которые решать надо именно Вам. Поскольку мне, например, то, что он сказал -- вполне понятно, и многим местным спецам, подозреваю, тожэ.

Цитата
Грубить не обязательно.


Правильно, не грубите, никто ж не заставляет!
PM MAIL   Вверх
sQu1rr
Дата 16.9.2014, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tzirechnoy @  16.9.2014,  18:23 Найти цитируемый пост)
 Поскольку мне, например, то, что он сказал -- вполне понятно, и многим местным спецам, подозреваю, тожэ.

Заметьте я не утверждал, что мр. tzirechnoy не понял чего-то там, я как раз таки был убежден, что вы разберетесь в том что написано. Я просто заметил, что то что написал господин Gimfixwork, может быть непонятно ОП, который не воспользовался гуглом в первый раз, и вряд ли будет сейчас.

Ошибка masinIL была в том что он передавал в функцию массив неправильно
нужно не
Код

arr_fun (arr[][size2], size1);

а так
Код

arr_fun(arr, size1);

заодно привел свой код в котором нету size1 как аргумента, так как не вижу смысла использовать константу в одном лупе, а в другом - аргумент функции, хотя константа доступна из глобального пространства.

Тем более, изначально вопрос звучал "Хотя бы дайте общие понятия по логике передачи адреса двух- и более мерного массива в функцию" который не подрузамевал наименование способов, которые можно как я указал выше найти в гугле. До сих пор никто так и не ответил на вопрос, мы только устраиваем тут холивар очередной smile
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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