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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
#1

Как возвратить одномерный массив - C++

03.03.2009, 23:52. Просмотров 1382. Ответов 10
Метки нет (Все метки)

Есть вопрос. Можно ли возвратить из одной функции в другую, ее вызвавшую, не просто одно значение, а массив значений через return?
C++
1
2
3
4
5
6
7
8
9
10
void main()
{
   ...
   func(A);
}
int func(int *S)
{
   ....
   return A[]; /*Или что-то в этом роде*/
}
Код однозначно неверный, т.к. у меня не работат. Но хотелось бы знать, можно ли так сделать и если можно, то как?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2009, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как возвратить одномерный массив (C++):

Как принять и возвратить массив в другой функции? - C++
пример: прототип функции ??? int main() { создаём функцию которая задаёт массив b выводим обнавлённый массив }

Как возвратить созданый динамический двухмерный массив из функции в main? - C++
Надо из функции mtx возвртить матрицу в главную функцию. Матрица создаеться и заполняеться в mtx. Подскажите как правильно его...

Возвратить массив из функции - C++
Вопрос стар как мир it, но неопытному человеку, пока его не ткнут носом почти невозможно самому разобраться. Вообщем, как возвратить из...

Возвратить массив из функции - C++
Вот код на FPC Lazarus, нада его точь в точь перевести в си++, я специально придумал этот пример для наглядности, мне нужно научиться...

Возвратить массив из функции - C++
как мне из функции input items возвратить мой массив?вот код protected: int ArrayLenght; int Amount; int *SortArray; ...

Как сложить массив чтоб получился одномерный массив? - C++
Например есть 3х мерный массив, как сложить его строки чтоб получился одномерный массив B (1 строка будет 1 элементом массива В). void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
04.03.2009, 00:04 #2
Указатель можно вернуть
C++
1
int *foo(...) { int *arr = new int[..] return arr; }
0
morf
6 / 4 / 2
Регистрация: 05.12.2008
Сообщений: 12
04.03.2009, 00:05 #3
Код однозначно неверный
хм........ в целом всё норм - только чтобы функция вернула массив значений - тип возвращаемиого значения должен быть указателем.
тоесть в твоём случае:
C++
1
int* func(int *S)
насчёт
C++
1
return A[]
это хз. но всегда делал так:
C++
1
return A;
где A - указатель на начало массива.
0
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
04.03.2009, 00:21  [ТС] #4
А можно коротенькую программку-пример, чтобы в main() возвращался массив, и main() его вывела на экран? У меня ошибки выводит, в самом конце в return.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
float* func(int (*S)[4]);
void main()
{
    int C[3][4];
    ...
}
float* srednee(int (*S)[4])
{
    int A[3],c=0;
              . . .
              . . .
    return (float) A[3]/4;
}
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
04.03.2009, 00:25 #5
Цитата Сообщение от SZ Посмотреть сообщение
А можно коротенькую программку-пример
Вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
int *_new(int len)
{
    int *arr  = new int[len];
 
    for(int i = 0; i < len; ++i)
        arr[i] = 0;
 
    return arr;
}
 
void _free(int *arr)
{
    delete[] arr;
}
int main()  
{  
    int *arr = _new(10);
 
    for(int i = 0; i < 10; ++i)
        cout<<arr[i]<<" ";
 
    _free(arr);
    cout<<endl;
 
    return 0;  
}
0
FAT
5 / 5 / 0
Регистрация: 03.03.2009
Сообщений: 18
04.03.2009, 00:26 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
int func(int b);
using namespace std;
void main()
{
int r,b;
cin>>b;
r=func(b);
}
int func(int b)
{
    int A[5];
    for(int i=0;i<5;i++)
    {A[i]=b;
    cout<<A[i]<<endl;}
    return A[5];
 
}
0
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
04.03.2009, 00:55  [ТС] #7
Не. Туговато идет. Вот мой код. Двумерный массив, его элементы каждой строчки сложил, суммы внес в отдельный массив, и этот массив хочу вывести на экран обратно в функции main():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
float func(int (*S)[4]);
void main()
{
    int C[3][4]={{1,3,1,6},
                      {7,2,5,2},
                      {3,9,3,1}};
    printf("Result is %d\n",func(C));
}
float func(int S[][4])
{
    int A[3],z=0;
    for(int i=0;i<3;i++)
        A[i]=0;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            z+=S[i][j];
        }
        A[i]=z;
        z=0;
    }
    return (float) A[3];
}
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.03.2009, 00:59 #8
Только указатель можно вернуть. Или через структуру/класс. Но обычным способом ты не сможешь возвратить массив из функции.
0
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
04.03.2009, 01:01  [ТС] #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Только указатель можно вернуть. Или через структуру/класс. Но обычным способом ты не сможешь возвратить массив из функции.
Оки буду пробовать.
0
Night_Light
17 / 17 / 2
Регистрация: 14.02.2009
Сообщений: 86
04.03.2009, 10:34 #10
Цитата Сообщение от FAT Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
int func(int b);
using namespace std;
void main()
{
int r,b;
cin>>b;
r=func(b);
}
int func(int b)
{
    int A[5];
    for(int i=0;i<5;i++)
    {A[i]=b;
    cout<<A[i]<<endl;}
    return A[5];
 
}
Бугага

Ещё не плохо было бы кроме указателя на начало массива получать колличество элементов в нём, если оно конечно не константно в месте вызова функции.

bool AllocateIntArray( int* & _array, int& _arraySize,...);
0
YurA_280784
Заблокирован
04.03.2009, 11:16 #11
Короче почитал и удивился, столько слов о такой мелочи, что даже голова кругом идёт8)
Массив из функции можно вернуть несколькими способами
1 - В функцию передаётся указатель на исходный массив без
C++
1
const
,тогда чтобы прибавить 1 ко всем элементам следующего массивчика int x[] = {1,2,3,4,5};
можно написать функцию
C++
1
2
3
4
5
void mas_add(int n, int * x)
{
for(int i = 0; i < n; i++)
 x[i] += 1;
}
где n - число элементов массива, можно было б написать в самом теле фунцкции что int n = sizeof(x)/sizeof(x[0]); - тогда можно обойтись без входного параметра n(но это так отступление)

2 - Функция сама может вернуть указатель на массив (вообщем пишем функциию с таким же алгоритмом как и в способе 1

C++
1
2
3
4
5
6
7
void mas_add(int n, int * x)
{
int *ret = (int *)malloc(n*sizeof(int));
for(int i = 0; i < n; i++)
 ret[i] = x[i] + 1;
return ret;
}
Ну а впроге 1,2 выглядят следующим образом
C++
1
2
3
4
5
6
7
1 - й способ
int x[] = {1,2,3,4,5};
mas_add(5,x);
 
2 - й способ
int x[] = {1,2,3,4,5};
int * y = mas_add(5,x);
Считаю 1-й способ предпочтительнее т.к во 2 способе функция постоянно создаёт новый массив, поэтому можно засорить память если не выполнить отчиску. Короче 1-й способ неприменим лишь в том случае когда необходимо оставить исходный массив без изменений,вот. Думаю терь SZ тебе всё станет понятно....

Добавлено через 8 минут 55 секунд
Извиняюсь должен чуток внести коррективы, запарился малёхо...
2 - й способ
C++
1
2
3
4
5
6
7
int * mas_add(int n, int * x)
{
int *ret = (int *)malloc(n*sizeof(int));
for(int i = 0; i < n; i++) 
ret[i] = x[i] + 1;
return ret;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2009, 11:16
Привет! Вот еще темы с ответами:

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

Как возвратить указатель - C++
Как из intova() возвратить указатель чтобы напечатать матрицу в main?? int main() { int n, m; while(!(n&gt;=1 &amp;&amp; n&lt;=5 &amp;&amp; m&gt;=1 &amp;&amp;...

Одномерный массив, подскажите как вывести, как просит в задании - C++
После ввода с клавиатуры произвольного одномерного массива целых чисел (в пределах знакового целого типа) вывести на экране нечетные из них...

Как возвратить значения обьекта? - C++
Здравствуйте,читаю книгу по С++ и возник интересный вопрос, каким образом можно возвратить значение объекту класса,допустим вот код: ...


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

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

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