0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
1

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

03.02.2009, 17:23. Показов 123252. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть функция, которая генерирует 2 параметра. Как сделать так, чтобы функция их вернула? Оба сразу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2009, 17:23
Ответы с готовыми решениями:

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

Как вернуть 2 значения из функции?
Добрый день. У меня такой вопрос - как в этой проге можно вернуть 2 значения из функции? #include...

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

Как вернуть два значения из функции?
Ребят, нужно вернуть из функции два значения. Подскажите как. Без массива public double...

30
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.02.2009, 17:25 2
Пусть тогда адрес памяти возвращает, на массив, например. А в идеале один параметр можно вернуть через принятые параметры.
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
03.02.2009, 17:35  [ТС] 3
"А в идеале один параметр можно вернуть через принятые параметры."

а это как?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.02.2009, 17:38 4
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
03.02.2009, 17:42  [ТС] 5
угу, спасибо!
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.02.2009, 18:31 6
А язык какой?
На C++ - запросто Возвращаешь std :: pair<Парам1, Парам2>.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.02.2009, 01:46 7
можно записать их в структуру и вернуть её (структуры можно возвращать как есть, без указателей)
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 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
0 / 0 / 0
Регистрация: 04.02.2009
Сообщений: 5
04.02.2009, 17:17 9
Цитата Сообщение от Vourhey Посмотреть сообщение
а это тебе его достаточно передать по указателю. тогда изменив его значение в функции оно изменится и везде. Это же указатели. Читай.
Ну или с помощью ссылок
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
04.02.2009, 17:57  [ТС] 10
Спасибо всем огромное! А язык Си

Добавлено через 33 минуты 32 секунды
а можно попросить привести пример со структурами?
Саму структуру, которую потом функция вернуть должна, в функции задавать надо? Или можно вне функции?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
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
Эксперт С++
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
06.02.2009, 23:03 16
Используйте std :: pair.
0
из племени тумба-юбма
2464 / 1788 / 416
Регистрация: 29.11.2015
Сообщений: 8,682
Записей в блоге: 15
14.10.2021, 23:34 17
Цитата Сообщение от Splendid Посмотреть сообщение
Есть функция, которая генерирует 2 параметра. Как сделать так, чтобы функция их вернула? Оба сразу?
Есть иной вариант, не совсем то что требуется, но тем не менее. Вернуть вновь созданные значения, через вызов другой функции, с обработкой в ней новых значений и возвратом результата. Как то так:
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int f2(int *a)
{
    return a[0] + a[1] + a[2];
}
 
int f1(int a, int b)
{
    int mas[3] = {10, 20, 2};
    mas[0] +=  a; // 12
    mas[1] -=  b; // 15
    mas[2] = mas[0] + mas[1]; // 27
    return f2(mas);
}
 
int main()
{
    int a=2;
    int b=5;
    printf("%d\n", f1(a, b));
    return 0;
}

То есть, пока дочерняя функция f1, не вернула значение в материнскую функцию main, все значения переменных, созданных в f1 не удаляются, а остаются памяти. Значения можно передать и обработать в новой дочерней функции f2 и вернуть результат обратно в f1. И только потом, этот результат вернется в основную функцию main. После этого все переменные дочерних функций будут удалены из памяти.
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
14.10.2021, 23:46 18
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Как то так:
Не понял прикола
0
из племени тумба-юбма
2464 / 1788 / 416
Регистрация: 29.11.2015
Сообщений: 8,682
Записей в блоге: 15
14.10.2021, 23:51 19
Folian, я же описал своими словами
0
3220 / 1441 / 464
Регистрация: 01.06.2021
Сообщений: 4,840
14.10.2021, 23:55 20
Структуры у меня медленные, медленнее даже классов.
А вот указатели работают очень быстро.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
double* multiplyByTwo(double a, double b)
{
    double* output = new double[2];
    output[0] = a * 2.;
    output[1] = b * 2.;
    return output;
}
 
int main()
{
    double* x = multiplyByTwo(3., 4.);
    cout << x[0] << " " << x[1];
    delete[] x;
}
0
14.10.2021, 23:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2021, 23:55
Помогаю со студенческими работами здесь

Как вернуть из функции два значения
Доброго времени суток! Подскажите, пожалуйста, как вернуть два значения: row и column из функции....

Как можно вернуть из функции более 1 значения?
Matlab. Как можно вернуть из функции более 1 значения? Может как-нибудь типа указателя как это...

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

Как вернуть сразу два параметра?
Функция генерирует два параметра. Как вернуть оба параметра сразу?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru