Другие языки программирования и технологии
как в с++ возвращать значение функции больше одного? допустим сразу несколько значений
возвращай сложный тип - массив, структуру
Доброго здоровья, Илья!
Возврат нескольких значений из функции — так это ж просто! Возможно двумя способами, и даже без взаимного исключения. В обоих способах лучше всего использовать ссылочный тип, то есть постфикс амперсанд.
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);
Возврат нескольких значений из функции — так это ж просто! Возможно двумя способами, и даже без взаимного исключения. В обоих способах лучше всего использовать ссылочный тип, то есть постфикс амперсанд.
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);
Антошка Картошка
спасибо, будет сегодня что поучить! с момента как я немного освоил программирование я думал нафиг это все, ну аргументы и тд.. если есть глобальные переменные, пока код в моем проекте не стало около 1000 строк)) потом такая белиберда ))
Массив, структура, класс. Есть даже класс pair в stl
Похожие вопросы
- Вопрос про возвращаемое значение из функции в С++.
- С++. Вопрос про возвращаемое значение из функции
- В чем разница между функциями, которые возвращают значения и которые не возвращают? Не вникаю в смысл слова "возвращает"
- Что значит "функция возвращает значение" в С++?
- Что значит возвращает значение функции? для чего нужен оператор return в си? как он работает?
- что значит в программировании функция, которая возвращает значение.
- Что значит "возвращать значение" в языках программирования?
- Стоит ли учить сразу несколько ЯПов?
- Какой прогой можно изменить размер сразу нескольких изображений?
- Как в Фотошоповском макете (PSD) выделить сразу несколько слоев одновременно? Вот такой вопрос.