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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 84, средняя оценка - 4.99
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

Как вернуть сразу 2 значения из функции? - C++

03.02.2009, 17:23. Просмотров 12707. Ответов 15
Метки нет (Все метки)

Есть функция, которая генерирует 2 параметра. Как сделать так, чтобы функция их вернула? Оба сразу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.02.2009, 17:25     Как вернуть сразу 2 значения из функции? #2
Пусть тогда адрес памяти возвращает, на массив, например. А в идеале один параметр можно вернуть через принятые параметры.
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
03.02.2009, 17:35  [ТС]     Как вернуть сразу 2 значения из функции? #3
"А в идеале один параметр можно вернуть через принятые параметры."

а это как?
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.02.2009, 17:38     Как вернуть сразу 2 значения из функции? #4
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
03.02.2009, 17:42  [ТС]     Как вернуть сразу 2 значения из функции? #5
угу, спасибо!
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
03.02.2009, 18:31     Как вернуть сразу 2 значения из функции? #6
А язык какой?
На C++ - запросто Возвращаешь std :: pair<Парам1, Парам2>.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.02.2009, 01:46     Как вернуть сразу 2 значения из функции? #7
можно записать их в структуру и вернуть её (структуры можно возвращать как есть, без указателей)
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
04.02.2009, 03:26     Как вернуть сразу 2 значения из функции? #8
Вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void foo(const int inp, int &outx, int &outy, int &outz)
{
    outx = inp + 10;
    outy = inp + 20;
    outz = inp + 30;
}
int main()
{
    int x,y,z;
    foo(10,x,y,z);
    std::cout<<"x = "<<x<<std::endl
        <<"y = "<<y<<std::endl
        <<"z = "<<z<<std::endl;
    return 0;
}
А вобче Vourhey прав...
Zaratystra
0 / 0 / 0
Регистрация: 04.02.2009
Сообщений: 5
04.02.2009, 17:17     Как вернуть сразу 2 значения из функции? #9
Цитата Сообщение от Vourhey Посмотреть сообщение
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
Ну или с помощью ссылок
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
04.02.2009, 17:57  [ТС]     Как вернуть сразу 2 значения из функции? #10
Спасибо всем огромное! А язык Си

Добавлено через 33 минуты 32 секунды
а можно попросить привести пример со структурами?
Саму структуру, которую потом функция вернуть должна, в функции задавать надо? Или можно вне функции?
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.02.2009, 18:05     Как вернуть сразу 2 значения из функции? #11
А можно попросить попробовать самому пример сделать? Разве, это так сложно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct pair
{
   int a, b;
};
 
struct pair return_pair(int c, int d)
{
   struct pair tmp = {c*2, d*2};
   return tmp;
}
 
int main(int argc, char **argv)
{
   struct pair a = return_pair(1,2);
   printf("A = %d, B = %d\n", a.a, a.b);
   return 0;
}
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.02.2009, 23:47     Как вернуть сразу 2 значения из функции? #12
Саму структуру, которую потом функция вернуть должна, в функции задавать надо? Или можно вне функции?
структуру нужно объявлять вне всех функций потому что у функции должен быть возвращаемый тип структура (чтобы он был виден когда функция определяется как возвращающая такой-то тип), структура может хранить значения различных типов, в этом её плюс

Код
 
#include <stdio.h>

struct x { int a, b; };

/* возвращает несколько переменных из функции в структуре */
main()
{
    struct x f(int, int);
    
    printf("%d %d\n",
        f(5, 1).a, f(1, 8).b);
    return 0;
}

struct x f(int a, int b)
{
    struct x tmp = { a*2, b*2 };
    return tmp;
}
операции идут () [] -> . слева направо, то есть сначала вычисляются скобки а потом точка, возвращение структуры введено в стандарте ANSI(89); возвращать можно структуру, а можно указатель на структуру, это различается в том плане, что когда возвращаешь структуру она вся копируется (то есть все её элементы), а когда указатель то копируется просто адрес. Так как возвращать адрес автоматической структуры нельзя, потому что она разрушается после работы функции, можно создать статическую структуру внутри функции.

Код
 
#include <stdio.h>

struct x { int a, b; };

main()
{
    struct x *f(int, int);
    
    printf("%d %d\n",
        f(5, 1)->a, f(1, 8)->b);
    return 0;
}

struct x *f(int a, int b)
{
    static struct x tmp;
    
    tmp.a = a*2;
    tmp.b = b*2;
    return &tmp;
}
статическую структуру нельзя инициализировать неконстантами (переменными то есть), и ещё она инициализируется только один раз, в момент создания, то есть чтобы придавать ей новые значения каждый раз, нужно присваивать их вне инициализации (инициализация - присваивание значения прямо в объявлении)
короче если у тебя структуры содержат немало данных, нужно юзать указатели, если мало, то можно прямо передавать (передавать можно в обе стороны)
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
06.02.2009, 16:27  [ТС]     Как вернуть сразу 2 значения из функции? #13
А можно еще один вопрос: Как передать элемент структуры в функцию?
Пробую тпо разному, и так, и так - не получается...

C++
1
2
3
4
5
6
7
8
9
10
struct perem
{
unsigned int step;
};
 
struct perem gstPerem;
 
unsigned int Generation_p_q(unsigned int uroven, unsigned int gstPerem.step)
{
}
Добавлено через 56 минут 4 секунды
извините, не тот вариант скинула.

Цитата Сообщение от Splendid Посмотреть сообщение
А можно еще один вопрос: Как передать элемент структуры в функцию?
Пробую тпо разному, и так, и так - не получается...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct perem
{
unsigned int step;
};
 
struct perem gstPerem;
 
unsigned int Generation_p_q(unsigned int uroven, struct perem* step)
{
}
 
 
void main()
{
   unsigned int uroven=1;  
    gstPerem.step=1;
   while(gstPerem.step!=0)
   {
   Generation_p_q(uroven, &gstPerem.step);
   }
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
06.02.2009, 17:25     Как вернуть сразу 2 значения из функции? #14
Цитата Сообщение от Splendid Посмотреть сообщение
А можно еще один вопрос: Как передать элемент структуры в функцию?
Пробую тпо разному, и так, и так - не получается...
Относись ко всему проще. Элементы структуры - точно такие же переменные, за исключением того,что доступ к ним происходит не по имени,а по struc_obj.name Конечно,это не совсем так и можно долго это мусолить,но нужно понимать,что все,что можно делать с обычной переменной - можно делать с полем структуры того же типа. Пример :
Код
typedef struct _point {
float x;
float y;
} Point;
void f(float x);
int main () {
     Point A;
     f(A.x);
     f(A.y);
};
вполне корректный код,за исключением того,что нужно определить тело функции f. Внутри функции f не имеет значения,взята переменная x из структуры,объекта или еще чего-бы-то ни было.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.02.2009, 22:33     Как вернуть сразу 2 значения из функции? #15
Код
unsigned int Generation_p_q(unsigned int uroven, struct perem* step)
здесь формальные аргументы функции unsigned int uroven, struct perem* step, т.е. аргументы из объявления;
фактические аргументы - это те, с которыми функция будет вызываться (то есть они могут быть и правильными и неправильными)
тебе может потребоваться такой тип для поля struct perem* step в случае

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
 
#include <stdio.h> 
 
struct xx {
    int c, d; 
}; 
 
/* передаёт подструктуру в функцию  и выводит */
main()
{ 
    void f(int, struct xx *); 
    
    struct x {
        int a, b;
        struct xx sub;
    } s = {
        1, 2, { 3, 4 }
    }; 
    
    f(s.a-s.b, &s.sub);
    return 0;
}
 
void f(int n, struct xx *s)
{
    printf("%d %d %d\n",
        n, s->c, s->d);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2009, 23:03     Как вернуть сразу 2 значения из функции?
Еще ссылки по теме:

C++ Вернуть из функции 2 значения
C++ Можно ли вывести сразу 2 значения int из функции через return?
C++ Из функции вернуть более одного значения
Как вернуть вектор из функции? C++
Как присвоить 10 компонентам сразу значения из массива? C++

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

Или воспользуйтесь поиском по форуму:
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
06.02.2009, 23:03     Как вернуть сразу 2 значения из функции? #16
Используйте std :: pair.
Yandex
Объявления
06.02.2009, 23:03     Как вернуть сразу 2 значения из функции?
Ответ Создать тему
Опции темы

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