Возможный дубликат:
Возврат нескольких значений из функции С++
может ли функция вернуть более одного значения?
Edit
Кроме возврата по ссылке.
Возможный дубликат:
Возврат нескольких значений из функции С++
может ли функция вернуть более одного значения?
Edit
Кроме возврата по ссылке.
Нет, но вы можете вернуть pair
или boost::tuple
, который может содержать несколько значений.
Кроме того, вы можете использовать ссылки для возврата нескольких значений, таких как:
void MyFunction(int a, int b, int& sum, int& difference);
Вы бы назвали эту функцию следующим образом:
int result_sum;
int result_difference;
MyFunction(1, 2, result_sum, result_difference);
Как указывает Хоган, технически это не возвращает несколько переменных, однако это хорошая замена.
В библиотеке boost::tuple
функция с именем tie
, которая упрощает процесс получения информации из возвращаемого tuple
, Если у вас была функция, которая вернула tuple
из двух double
и захотела загрузить их на две локальные переменные x
и y
, вы можете присвоить возвращаемое значение функции boost::tie(x, y)
.
Пример:
#include <math.h>
#include <iostream>
#include <boost/tuple/tuple.hpp>
const double PI = 3.14159265;
boost::tuple<double, double> polar_to_rectangular(double radius, double angle)
{
return boost::make_tuple(radius * cos(angle), radius * sin(angle));
}
int main()
{
double x;
double y;
boost::tie(x, y) = polar_to_rectangular(4, (45 * PI) / 180);
std::cout << "x == " << x << ", y == " << y << std::endl;
return 0;
}
Да - функция возвращает структуру. Или верните значения через контрольные параметры.
struct A {
int x, y;
A( int a, int y ) : x(x), y(y) {}
};
A myfun() {
return A( 0, 42 ); // return two values
}
или
void myfun( int & a, int & b ) {
a = 0;
b = 42;
}
Функция может возвращать значения указанными способами:
Если вам нужно самодостаточное возвращаемое значение, вы обычно завершаете типы, которые вам нужны в структуре, и возвращаете объект этой структуры по значению. Если вы хотите избежать локальной копии, вы должны перейти в ссылочный параметр, который нужно изменить.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int a;
int b;
}Mystruct;
Mystruct myfun();
int main()
{
char name[30];
Mystruct ms2;
ms2 = myfun();
printf("val1: %d val2: %d",ms2.a,ms2.b);
return 0;
}
Mystruct myfun()
{
int a,b;
Mystruct ms;
a = 10;
b = 20;
ms.a=a;
ms.b=b;
return(ms);
}
использовать структуру и возвратить несколько значений с разными типами данных.
main()
{
int a=10,b=20;
int *c;
c=aa(a,b);
printf("%d %d",*c,*c+1);
}
void aa(int a,int b)
{
int c1[2];
c1[0]=b+a;
c1[1]=a-b;
return(c1);
}
здесь, адрес c1 будет возвращен. поэтому он будет хранить в основном с каретки. мы можем извлекать обе переменные через указатель,