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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
03.03.2009, 23:52     Как возвратить одномерный массив #1
Есть вопрос. Можно ли возвратить из одной функции в другую, ее вызвавшую, не просто одно значение, а массив значений через return?
C++
1
2
3
4
5
6
7
8
9
10
void main()
{
   ...
   func(A);
}
int func(int *S)
{
   ....
   return A[]; /*Или что-то в этом роде*/
}
Код однозначно неверный, т.к. у меня не работат. Но хотелось бы знать, можно ли так сделать и если можно, то как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
04.03.2009, 00:04     Как возвратить одномерный массив #2
Указатель можно вернуть
C++
1
int *foo(...) { int *arr = new int[..] return arr; }
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 - указатель на начало массива.
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;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 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;  
}
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];
 
}
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];
}
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.03.2009, 00:59     Как возвратить одномерный массив #8
Только указатель можно вернуть. Или через структуру/класс. Но обычным способом ты не сможешь возвратить массив из функции.
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
04.03.2009, 01:01  [ТС]     Как возвратить одномерный массив #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Только указатель можно вернуть. Или через структуру/класс. Но обычным способом ты не сможешь возвратить массив из функции.
Оки буду пробовать.
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,...);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2009, 11:16     Как возвратить одномерный массив
Еще ссылки по теме:

Возвратить массив из функции C++
C++ Одномерный массив, как выйти?
C++ Одномерный массив, подскажите как вывести, как просит в задании
Возвратить массив из функции C++
C++ Как перевернуть одномерный массив?

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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
04.03.2009, 11:16     Как возвратить одномерный массив
Ответ Создать тему
Опции темы

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