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

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

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

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

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

Есть функция, которая генерирует 2 параметра. Как сделать так, чтобы функция их вернула? Оба сразу?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2009, 17:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуть сразу 2 значения из функции? (C++):

Как вернуть сразу 2 значения массива в функции? - C++
Собственно дан у меня например массив "aa", где l-левая граница, а r-правая. При выполнении кода мне надо сразу вернуть эти два стоящих...

Как вернуть из функции два значения? - C++
Подскажите,как вернуть из ф-ции 2 значения .Вроде ,как то можно с помощью pair ,но как здесь это применить?Заранее спасибо Source.cpp ...

Как вернуть из функции два значения - C++
Доброго времени суток! Подскажите, пожалуйста, как вернуть два значения: row и column из функции. Спасибо! void ReadM(long double **mat,...

Как вернуть больше одного значения из функции? - C++
здрасти, как быть если функция должна возвратить не 1 значение а 2?

Вернуть из функции 2 значения - C++
Как вернуть из функции 2 значения? Нужно вернуть строку и ее длину, но чтобы функция SendData() не вызывалась 2 раза. Сейчас узнаю длину...

Из функции вернуть более одного значения - C++
У меня есть функция: code(int y, int z){ int g=y+z; int f=y*z; return g,f; } main(){ int sum=code(5,15); } Как прописать...

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

а это как?
0
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.02.2009, 17:38 #4
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
03.02.2009, 17:42  [ТС] #5
угу, спасибо!
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
03.02.2009, 18:31 #6
А язык какой?
На C++ - запросто Возвращаешь std :: pair<Парам1, Парам2>.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.02.2009, 01:46 #7
можно записать их в структуру и вернуть её (структуры можно возвращать как есть, без указателей)
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
04.02.2009, 03:26 #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 прав...
0
Zaratystra
0 / 0 / 0
Регистрация: 04.02.2009
Сообщений: 5
04.02.2009, 17:17 #9
Цитата Сообщение от Vourhey Посмотреть сообщение
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
Ну или с помощью ссылок
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
04.02.2009, 17:57  [ТС] #10
Спасибо всем огромное! А язык Си

Добавлено через 33 минуты 32 секунды
а можно попросить привести пример со структурами?
Саму структуру, которую потом функция вернуть должна, в функции задавать надо? Или можно вне функции?
0
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.02.2009, 18:05 #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;
}
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.02.2009, 23:47 #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;
}
статическую структуру нельзя инициализировать неконстантами (переменными то есть), и ещё она инициализируется только один раз, в момент создания, то есть чтобы придавать ей новые значения каждый раз, нужно присваивать их вне инициализации (инициализация - присваивание значения прямо в объявлении)
короче если у тебя структуры содержат немало данных, нужно юзать указатели, если мало, то можно прямо передавать (передавать можно в обе стороны)
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
06.02.2009, 16:27  [ТС] #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);
   }
0
XuTPbIu_MuHTAu
Эксперт С++
2225 / 740 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
06.02.2009, 17:25 #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 из структуры,объекта или еще чего-бы-то ни было.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.02.2009, 22:33 #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);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2009, 22:33
Привет! Вот еще темы с ответами:

Необходимо вернуть значение функции из Булевского значения и посчитать факториал - C++
Стоит задача- Написато программу которая спрашивает пользователя - Рост, вес, и возраст а затем выдаёт размер одежды по след. формулам: ...

Можно ли вывести сразу 2 значения int из функции через return? - C++
Можно ли вывести сразу 2 значения из функции int через return ? Например функция находит X1 и X2 из квадратного уравнения, и может ли она...

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

Как присвоить 10 компонентам сразу значения из массива? - C++
Есть на форме 10 компонентов Clabel,в них есть поле Caption,в которое и нужно присвоить значения. Суть в том,что бы не писать 10 строк...


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

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

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