Форум программистов, компьютерный форум CyberForum.ru

возвратить функцией массив - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Arcor
 Аватар для Arcor
4780 / 1781 / 155
Регистрация: 20.11.2009
Сообщений: 5,626
Записей в блоге: 1
15.04.2012, 15:21     возвратить функцией массив #1
собственно такой вопрос, любыми методами нужно передать двумерный массив через функцию обратно, я не знаю как сделать это в с++, знаю только как в дельфи сделать это можно, но понадобилось решение в с++

кто в курсе, объясните или напишите пожалуйста небольшой пример

заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 15:21     возвратить функцией массив
Посмотрите здесь:

C++ Как возвратить одномерный массив
Возвращение функцией массива (или указателя на массив) C++
не могу сделать программу с указателями на массив и с функцией C++
C++ Как возвратить созданый динамический двухмерный массив из функции в main?
как принять и возвратить массив в другой функции C++
Возвратить массив из функции C++
Одномерный Массив. С функцией! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 17:50     возвратить функцией массив #21
Arcor, ну вам нужно push_back'ать вектор целиком. Но раз вам известны размеры матрицы, почему бы сразу не создать её целиком и не применять оператор []?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
15.04.2012, 17:54     возвратить функцией массив #22
Цитата Сообщение от Nekto Посмотреть сообщение
Вы сейчас ломаете мой взгляд на массивы... Почему память, выделенная с помощью new, к которой можно обращаться через индекс, не считается массивом?
Потому что "массив" - это синтаксическая конструкция языка. При помощи которой, вы можете создавать различные типы данных.

Например: int a[10] и int b[20] - это два принципиально разных типа данных.
Так же, эти два принципиально разных типа данных принципиально отличаются от типа данных "указатель".

Соответственно, правомерно сделать проверку типов. Функция может принимать только массив из 10 элементов, и браковать на стадии компиляции все прочие массивы, в том числе - сырые указатели.

Что касается адреса памяти - это всего лишь адрес. "Массив" на языке с++ не является "адресом памяти".
Arcor
 Аватар для Arcor
4780 / 1781 / 155
Регистрация: 20.11.2009
Сообщений: 5,626
Записей в блоге: 1
15.04.2012, 18:07  [ТС]     возвратить функцией массив #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
Arcor, ну вам нужно push_back'ать вектор целиком. Но раз вам известны размеры матрицы, почему бы сразу не создать её целиком и не применять оператор []?
ну так мне ее сперва заполнить нужно программно, скажем таким методом я буду считывать все из файла в массив, а в другой функции буду уже забирать из этой функции переделанные и обработанные значения. Поэтому и нужно было что-то независимое, и с которого можно было бы забирать результат
Bers
Заблокирован
15.04.2012, 18:08     возвратить функцией массив #24
Цитата Сообщение от silent_1991 Посмотреть сообщение
Мы всё равно не сможем упаковать что-то в массив внутри функции и вернуть именно массив как самостоятельный объект.
Ну это максимум, что можно сделать с обычным массивом.
Нельзя из функции вернуть массив по значению.

C++
1
2
// : error C2090: функция возвращает массив
int (Test1(  int (arr)[10] )   )[10]       {  return arr; }
С чем связанно данное ограничение, лично мне не понятно. С другой стороны, на практике я ни разу не сталкивался с ситуацией, когда очень надо было бы вернуть массив по значению.
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:10     возвратить функцией массив #25
Arcor, создаём объект:
C++
1
std::vector<std::vector<type> > matrix(size1, std::vector<type>(size2));
После этого с ним можно работать как с массивом, созданным так:
C++
1
type matrix[size1][size2];
Добавлено через 1 минуту
Цитата Сообщение от Bers Посмотреть сообщение
Нельзя из функции вернуть массив по значению.
Вот в этом и заключалось моё начальное "вернуть полноценный, автономный массив" .
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 18:11     возвратить функцией массив #26
Цитата Сообщение от silent_1991 Посмотреть сообщение
Nekto, тут смотря как посмотреть. Можно назвать массивом байт объект любого типа, int, double и т.д.
Ну вот, например, "Уничтожение массива delete[] pointer"(Бьерн Страуструп). Называется именно уничтожение массива. И, раз его можно применить к указателю, то это можно назвать массивом. ИМХО.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 18:16     возвратить функцией массив
Еще ссылки по теме:

Двумерный динамический массив, неполадки с функцией C++
двухмерный массив(можно с использованием функцией) C++
Возвратить массив из функции C++
C++ Цикл с функцией и массив
Возвратить массив из функции C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:16     возвратить функцией массив #27
Nekto, всё дело в уровне абстракции. Раз мы работаем с указателем, под который выделена память, как с массивом, то и думаем про него как про массив. Однако фактически это не массив (массив ячеек памяти - да, но не массив на уровне языка).

Добавлено через 3 минуты

Не по теме:

Пардон, не "под который выделена память", а "который указывает на выделенную памяти". Под указатель память выделяется при создании.

Yandex
Объявления
15.04.2012, 18:16     возвратить функцией массив
Ответ Создать тему
Опции темы

Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru