Другие языки программирования и технологии

как в с++ возвращать значение функции больше одного? допустим сразу несколько значений

возвращай сложный тип - массив, структуру
Саша Куб
Саша Куб
5 229
Лучший ответ
Доброго здоровья, Илья!
Возврат нескольких значений из функции — так это ж просто! Возможно двумя способами, и даже без взаимного исключения. В обоих способах лучше всего использовать ссылочный тип, то есть постфикс амперсанд.

1. Функция объявляется с несколькими параметрами, среди которых обязательно присутствуют параметры ссылочного типа. Пример:

void customfunc (unsigned int& Age, unsigned long& Salary);
// При вызове функции customfunc в скобках следует указать имена переменных.
// По замыслу возврат из функции осуществляется через параметры.
// Например, вызов customfunc (IraAge, IraFund); приведёт к тому, что в переменных IraAge и IraFund окажутся значения, которые будут присвоены им в теле функции через имена Age и Salary.

Любой тип, после и имени которого стоит амперсанд (&), и есть ссылочный тип. Объявление формального параметра ссылочного типа означает, что при вызове функции с фактическим параметром внутрь функции передаётся не копия значения параметра, а фактическое место этого значения в памяти. Это равносильно тому, как если бы была объявлена статическая или глобальная переменная, а в теле функции имело место обращение к той же переменной. Значит, если в теле функции переменная получит конкретное значение, то это значение останется и после выхода из функции. То же верно и для параметров ссылочного типа.

2. Ну а другой способ уже указали отвечавшие ранее. Во-первых, следует объявить составной тип. Во-вторых, функция должна быть объявлена с возвратом значения составного типа, что фактически и будет возвратом нескольких значений враз одной функцией. Для экономии памяти и времени лучше всего использовать адрес, то есть или указатель на тип, или ссылочный тип.

struct Anketa {
char* name;
unsigned int age;
float salary;
}

Anketa& GoldColumn (int sn);

// При вызове функции, например, Genchik = GoldColumn (51); сначала адрес переменной Genchik передаётся внутрь тела функции GoldColumn, потом результат возвращается функцией в переменной Genchik. В противном случае результат формируется во внутренней переменной, а при возврате из функции копируется во внешнюю переменную. Копирование занимает и дополнительную память и время.

Разумеется, оба способа разрешается совместить в одном объявлении. Пример:

Anketa& Report (int& fdir, char * gere);
KB
Kypu Bambyk
16 172
Антошка Картошка спасибо, будет сегодня что поучить! с момента как я немного освоил программирование я думал нафиг это все, ну аргументы и тд.. если есть глобальные переменные, пока код в моем проекте не стало около 1000 строк)) потом такая белиберда ))
Массив, структура, класс. Есть даже класс pair в stl