С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
1

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

03.03.2009, 23:52. Просмотров 1522. Ответов 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
Ответы с готовыми решениями:

Как принять и возвратить массив в другой функции?
пример: прототип функции ??? int main() { создаём функцию которая...

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

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

Возвратить массив из функции
Вопрос стар как мир it, но неопытному человеку, пока его не ткнут носом почти...

Возвратить массив из функции
как мне из функции input items возвратить мой массив?вот код protected:...

10
ISergey
Maniac
Эксперт С++
1414 / 924 / 149
Регистрация: 02.01.2009
Сообщений: 2,754
Записей в блоге: 1
04.03.2009, 00:04 2
Указатель можно вернуть
C++
1
int *foo(...) { int *arr = new int[..] return arr; }
0
morf
6 / 4 / 0
Регистрация: 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
Эксперт С++
1414 / 924 / 149
Регистрация: 02.01.2009
Сообщений: 2,754
Записей в блоге: 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 / 1
Регистрация: 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
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
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 / 0
Регистрация: 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
04.03.2009, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2009, 11:16

Как сложить массив чтоб получился одномерный массив?
Например есть 3х мерный массив, как сложить его строки чтоб получился...

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

Как возвратить указатель
Как из intova() возвратить указатель чтобы напечатать матрицу в main?? int...


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

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

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