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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.70
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
#1

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

15.05.2010, 16:57. Просмотров 5418. Ответов 22
Метки нет (Все метки)

Как вернуть массив из функции и узнать его размер?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 16:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуть массив? (C++):

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

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

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

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

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

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

22
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:02 #2
SSxMe, возвратить - легко, узнать размер - никак.
Так что, тем или иным образом необходимо сообщить вызывающей функции и адрес массива и его размер.
Самый простой вариант:
C++
1
2
3
4
5
6
7
8
9
struct Array {
  int* p;
  int size;
}
 
Array CreateArray(int size) {
  Array result = { new int[size], size };
  return result;
}
2
Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
15.05.2010, 17:04 #3
Верни указатель на первый элемент. А если нужен размер, то никак.
Зато можно завернуть указатель и размер массива в структуру и её вернуть как результат вызова функции.

Добавлено через 22 секунды
неуспел
1
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:06  [ТС] #4
спасибо всем))
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.05.2010, 17:07 #5
Еще вариант malloc

Добавлено через 36 секунд
Как раз из функции массив может вернуть.
0
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:07  [ТС] #6
Еще вариант malloc
а это вроде бы устаревшее
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:07 #7
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Еще вариант malloc
Для СИ - вариант, для С++ - нет.
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.05.2010, 17:08 #8
а это вроде бы устаревшее
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:08 #9
Цитата Сообщение от SSxMe Посмотреть сообщение
а это вроде бы устаревшее
Для СИ другого способа нет.
0
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:09  [ТС] #10
Я на с++ пишу
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:11 #11
Цитата Сообщение от SSxMe Посмотреть сообщение
Я на с++ пишу
Если ограничений нет - используй std::vector и не парься с памятью, размерами и т.д.
1
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:20  [ТС] #12
спасибо, вот так сделал..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
using namespace;
 
vector<int> AnyFunction(){
    vector<int> AnyArray;
    AnyArray.push_back(3);
    AnyArray.push_back(6786);
    ...
    return AnyArray;
}
 
int main(){
    
    vector<int> AnyArray = AnyFunction(); // вернуть массив
    cout<<AnyArray.size()<<endl; // узнать размер массива
    return 0;
}
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.05.2010, 17:20 #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
и не парься с памятью, размерами и т.д.
париться то все-равно придется, так как вектор все равно надо будет создавать динамически
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:23 #14
Цитата Сообщение от alex_x_x Посмотреть сообщение
париться то все-равно придется, так как вектор все равно надо будет создавать динамически
std::vector можно и по значению возвращать, тогда париться не придется.
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.05.2010, 17:25 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
using namespace std;
 
void AnyFunction(vector<int>& AnyArray){
    AnyArray.push_back(3);
    AnyArray.push_back(6786);
    ...
}
 
int main(){
    
    vector<int> AnyArray;
           AnyFunction( AnyArray ); // вернуть массив
    cout<<AnyArray.size()<<endl; // узнать размер массива
    return 0;
}
так избавишься от бесполезных копирований

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
std::vector можно и по значению возвращать, тогда париться не придется.
дада, вы правы, но это приведет к вызову конструктора копирования
1
15.05.2010, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2010, 17:25
Привет! Вот еще темы с ответами:

Как вернуть массив из функции? - C++
int SumElementovStolbca(int M, int mas, int N) { int sum = 0; for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) {...

Как вернуть массив из функции? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int mass(int n) { int* Mass = new int; //здесь...

Как вернуть массив из функции? - C++
Please! #include &lt;iostream&gt; using namespace std; int _plus1 (int array ) { for (int i = 0; i &lt; 5; i++){ array...

Как вернуть массив из функции? - C++
В общем есть функция: ? foo() { array&lt;array&lt;double, N&gt;, 10&gt; Wave; .... return ?; } Как правильно написать return?


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

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

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