Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1234569
5 / 5 / 3
Регистрация: 25.11.2010
Сообщений: 23
1

Как вернуть массив?

03.06.2012, 08:14. Просмотров 1509. Ответов 10
Метки нет (Все метки)

Как правильно вернуть локальный массив (вместе с размером) из одной функции в main-функцию и потом передать его в третью функцию?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int* first(int &rArraySize) //Есть функция
{
rArraySize=;//задаём размер массива
int* Array = new int [rArraySize]; //создаем массив
 
return Array; //возвращаем указатель на массив
}
 
void third(int* pReturnedArray, const int rArray1DSize) //прототип
 
void main()
{
int rArray1DSize, * pReturnedArray = NULL;
pReturnedArray = first(preturnedArray); //вызываем первую функцию
third(pReturnedArray, rArray1DSize); //вызываем третью функцию
}
Найденные способы:
1) Передача массива в функцию по ссылке или по указателю - как сейчас, нужно ли делать static функцию first?
2) Стандартный контейнер, например vector - не подходит, нужен исходный неотсортированный массив.
3) Умный указатель - не подходит.
4) Агрегация массива в класс-обработчик - не хочется заворачивать.
5) Использовать структуру - не хочется заворачивать.
6) Др. варианты?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 08:14
Ответы с готовыми решениями:

Как вернуть массив в данной функции ? Или как записать массив в переменную ?
#pragma once #include "stdafx.h" const int S = 49; int bin2; int decbin(int a, int...

Почему функция не может вернуть массив, но может вернуть структуру содержащий массив?
Почему функция не может вернуть массив, но может вернуть структуру содержащую массив? Согласитесь...

Как вернуть массив
Можно ли вернуть массив через возвращаемое значение? Если нет, то как можно сделать вывод массива...

Как вернуть массив?
Функция вроде как работает. Но функция "printMass(mas, l);" дожа выводить этот новый массив, она...

Как вернуть массив?
Есть программа #include "stdafx.h" int fun1(int mas,int r) { int i; for (i=0;i<r;i++)...

10
Catstail
Модератор
24385 / 12326 / 2239
Регистрация: 12.02.2012
Сообщений: 20,022
03.06.2012, 09:01 2
Так чем плох возврат указателя? Правда динамический массив не назовешь локальным. Да думаю, что локальный (т.е. размещенный в стеке функции) массив вряд ли можно передать. После выхода из функции эта память будет считаться свободной.
0
1234569
5 / 5 / 3
Регистрация: 25.11.2010
Сообщений: 23
03.06.2012, 09:20  [ТС] 3
Верно ли, если массив объявлен в функции, значит он локальный, будь он динамическим или статическим?

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

Хочется найти вариант на все случаи жизни, без создания объектов и т.д.
0
Catstail
Модератор
24385 / 12326 / 2239
Регистрация: 12.02.2012
Сообщений: 20,022
03.06.2012, 11:26 4
Дело не в том, где массив объявлен, а в том, где он хранится. Если в куче - Бога ради! - создавайте в функции, передавайте указатель и используйте, где хотите! Но если он хранится в стеке функции:

C++
1
2
3
4
5
6
7
8
int * Func(...)
{
 
   int A[100];
 
   return A;
 
}
ни к чему хорошему не приведет.

"Хочется найти вариант на все случаи жизни, без создания объектов" - осторожно скажу: это вряд ли получится...
0
03.06.2012, 11:26
1234569
5 / 5 / 3
Регистрация: 25.11.2010
Сообщений: 23
03.06.2012, 11:39  [ТС] 5
Цитата Сообщение от Catstail Посмотреть сообщение
Дело не в том, где массив объявлен, а в том, где он хранится. Если в куче - Бога ради! - создавайте в функции, передавайте указатель и используйте, где хотите! Но если он хранится в стеке функции:
Вот это - где он будет хранится, меня и путает.
Т.е. динамические массивы всегда хранятся в куче?
0
Catstail
Модератор
24385 / 12326 / 2239
Регистрация: 12.02.2012
Сообщений: 20,022
03.06.2012, 12:26 6
Думаю, да. Динамические массивы глобальны по месту размещения элементов.
1
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
03.06.2012, 12:35 7
Цитата Сообщение от 1234569 Посмотреть сообщение
Как правильно вернуть локальный массив
Но в вашем коде вы динамически выделяете память. С помощью указателей можно делать с этой выделенной памятью под массив все что угодно в любых функциях. Только в конце программы надо не забыть очистить память.
C++
1
delete[] pReturnedArray;
1
Лжец
31 / 31 / 5
Регистрация: 13.12.2011
Сообщений: 106
03.06.2012, 12:35 8
Т.е. динамические массивы всегда хранятся в куче?
Думаю, да.
Эм, а разве массив объявленный таким образом:

C++
1
int* Array = new int [rArraySize];
может храниться где-то не в куче?
0
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
03.06.2012, 12:38 9
Если вы ставили вопрос иначе, есть ли какие нибудь способы вернуть массив, созданный без использования динамической памяти, то такого способа нет.

Добавлено через 1 минуту
Цитата Сообщение от Лжец Посмотреть сообщение
Эм, а разве массив объявленный таким образом:
Код C++
1 int* Array = new int [rArraySize];
может храниться где-то не в куче?
Нет, просто сказали общую концепцию. Если хранится в куче - можно, иначе - нет.
0
1234569
5 / 5 / 3
Регистрация: 25.11.2010
Сообщений: 23
03.06.2012, 13:11  [ТС] 10
А как ещё можно передать динамический массив из функции?
0
Lordif
21 / 21 / 4
Регистрация: 18.04.2010
Сообщений: 87
03.06.2012, 13:39 11
Ну ваш вариант самый нормальный. Если есть еще какие варианты, то все равно неудачные.
0
03.06.2012, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2012, 13:39

Как вернуть массив?
Нужно вернуть массив из функции, как это сделать? #include "stdafx.h" #include <iostream>...

Как вернуть массив?
Как вернуть массив из функции и узнать его размер?

Как вернуть массив из функции?
#include "stdafx.h" #include <iostream> using namespace std; int mass(int n) { int* Mass...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru