Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 12:53   #1
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию Как получить из функции массив

К примеру такой кодна самом деле там все сложнее)
Код:
#include <iostream>
using namespace std;
int pr(int a[],int b);

int pr[](int a[]){
    int rez[5];
    for(int i=0;i<5;i++) rez[i]=a[i]/2;
    return rez[5];
}
int main(){
    int t[5]={1,2,3,4,5};
    cout<<pr[](t);
return 0;
}
надо чтоб функция pr передавала массив из 5 элементов.

Последний раз редактировалось MaTBeu; 28.03.2010 в 21:10.
LOST94 вне форума Ответить с цитированием
Старый 28.03.2010, 12:58   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ф-я не может возвращать массив. Можно вернуть только указатель на него:
Код:
#include <iostream>
using namespace std;

int* pr(int a[]);

int* pr(int a[]){
   for(int i=0;i<5;i++) a[i]=a[i]/2;
   return a;
}

int main() {
    int t[5]={1,2,3,4,5};
    int* t2 = pr(t); 
    for(int i=0; i<5; i++)
       cout<< t2[i] << endl;
    cin.get();
    return 0;
}

Последний раз редактировалось NiCola999; 28.03.2010 в 13:01.
NiCola999 вне форума Ответить с цитированием
Старый 28.03.2010, 13:19   #3
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию

но тогда предыдущее что было в t[5] сотрется?
LOST94 вне форума Ответить с цитированием
Старый 28.03.2010, 13:23   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

нет, он изменится в функции pr, но т.к ф-я возвращает указатель, нужно создать указатель и присвоить ему значение ф-ии. Конечно так делать не хорошо, поэтому вместо того чтобы возвращать указатель на массив можно просто изменить внутри функции его:

Код:
#include <iostream>
using namespace std;
void pr(int* a);

void pr(int* a){
   for(int i=0;i<5;i++) a[i]=a[i]/2;   
}

int main() {
    int t[5]={1,2,3,4,5};
    pr(t); 
    for(int i=0; i<5; i++)
    cout<< t[i] << endl;
    cin.get();
    return 0;
}

Последний раз редактировалось NiCola999; 28.03.2010 в 13:26.
NiCola999 вне форума Ответить с цитированием
Старый 28.03.2010, 13:28   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
#include <iostream>
using namespace std;

int* pr(int* a, int n)
   {
   int* b = new int[n];
   for(int i = 0; i < n; i++) 
      b[i]=a[i] / 2;
   return b;
   }

int main() {
    int t[5]={1,2,3,4,5};
    int* t2 = pr(t, 5); 
    for(int i=0; i<5; i++)
       cout<< t2[i] << endl;
    cin.get();
    delete[] t2;
    return 0;
}
Создаем новый массив, в него записываем результат. Потом освобождаем динамически выделенную память.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 28.03.2010, 13:29   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

такой подход тоже не рационален. Пользователю придется каждый раз очищать память после использования, а пользователь ленивый, не прочитает документацию по функции и отсюда утечки памяти итд =)

Последний раз редактировалось NiCola999; 28.03.2010 в 13:31.
NiCola999 вне форума Ответить с цитированием
Старый 28.03.2010, 13:47   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Отнюдь. Зависит от того, что за функция. Возможно, по умолчанию предполагается, что функция создает новый массив. Да и вообще, если пользователь присваивает неинициализированному указателю значение функции, должен бы и догадаться, что там что-то появилось!
А в данном случае - я не знаю, что именно нужно ТС'у, так что может быть тут вообще незачем создавать новый массив.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как присвоить все три значения вектору В и вывести его как массив столбец при вызове функции Tomoa Microsoft Office Excel 8 08.03.2010 20:42
Получить значения функции sin(x) (Pascal) Женек Помощь студентам 1 30.01.2010 00:23
Как сделать чтобы двумерный массив который создается в функции можно было использовать в других функциях Olya90 Помощь студентам 4 20.04.2009 18:39
Как получить с помощью функции автоматического вычисления итогов общий итог внизу таблицы prikolist Microsoft Office Excel 2 01.12.2008 13:10
Получить массив.. Roberto Помощь студентам 5 08.05.2008 21:01