Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 11:13   #1
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию Вопрос про функцию

Всем привет, подскажите пожалуйста можно ли возвратить из функции более 2-х значений? в книгах толкового ответа не нашел.
Знаю что можно сделать выборку из двух возвращаемых значений
Код:
if (.....)
{
   return a;
}
else
{
   return b;
}
но как вернуть оба значения? чтобы потом присвоить их в основной функции.
Matr1x вне форума Ответить с цитированием
Старый 12.11.2009, 11:20   #2
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от triton Посмотреть сообщение
Или свичом, или по элзу пиши снова иф.
а если нужно из функции оба значения сразу вернуть?
Matr1x вне форума Ответить с цитированием
Старый 12.11.2009, 11:27   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вернуть можно только одно значение. Но можно вернуть, например, структуру, содержащую в себе несколько значений.
Код:
struct Point
{
Point(double x, double y): X(x), Y(y){}
double X, Y;
}
Point f()
{
double x = 10.0;
double y = 0.5;
return Point(x, y);
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 12.11.2009, 11:29   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

можно еще указатели использовать
что-то типа
Код:
void func(int *a, int *b) 
{
	*a = 10 ; 
	*b = 20 ;
}
int main()
{

	int x=0, y=0;
	func(&x, &y) ;

}
m0nax вне форума Ответить с цитированием
Старый 12.11.2009, 11:44   #5
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от triton Посмотреть сообщение
Оба одновременно формально нельзя, но можно запихать оба в элементы одного нескалярного.
Непонял, всмысле методом перегруженной функции? Я спрашиваю потому что иногда неудобно делать 10 маленьких фунций, если бы одна могла возвращать несколько значений было бы славно.
А еще вопросик, недавно пытался массив передать в функцию, ну и потом возвратить его.. на меня кампилятор наругался.Передавал и возвращал я так:
Код:
int oper1(int b[]);
int main()
{ .......
   int b[100];
   b[]=oper1(b[]);
}
int oper1(int b[])
{ ........
   //тут всякие операции с массивом
return b[];
}
ругалось на квадратные скобочки у массива почемуто(
Matr1x вне форума Ответить с цитированием
Старый 12.11.2009, 11:59   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Matr1x Посмотреть сообщение
Непонял, всмысле методом перегруженной функции? Я спрашиваю потому что иногда неудобно делать 10 маленьких фунций, если бы одна могла возвращать несколько значений было бы славно.
Код:
struct my_result
{
  int i;
  float f;
}

my_result func(int i, float f)
{
  my_result res;
  res.i = i + 50;
  res.f = f *5;
  return res;
}

int main()
{
  my_result res = func(10, 5.5f)
  // Теперь в res записано два результата функции
}
Не самый удачный пример, реализация не очень, но суть такая. Можно там конструкторы всякие наперегружать, операторы, чтобы удобнее было результатом пользоваться,...
Чем не устраивает вариант с передачей параметров по ссылке, я не понимаю
Цитата:
Сообщение от Matr1x Посмотреть сообщение
А еще вопросик, недавно пытался массив передать в функцию, ну и потом возвратить его.. на меня кампилятор наругался.Передавал и возвращал я так:
...
ругалось на квадратные скобочки у массива почемуто(
Чушь написана, вот компилятор и ругается. Массивы всегда передаются как указатель на нулевой элемент. По значению массив не передашь, т.е. присваивать результат работы функции нет смысла.
Код:
int[] oper1(int b[]);
int main()
{ .......
   int b[100];
   oper1(b);
}
int[] oper1(int b[])
{ ........
   //тут всякие операции с массивом
return b; // вообще можно ничего не возвращать и описать функцию как void
}
pu4koff вне форума Ответить с цитированием
Старый 12.11.2009, 12:09   #7
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

спасибо всем огромное!
Matr1x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про vector функцию insert Dimedrolum Общие вопросы C/C++ 2 18.09.2009 22:51
Задача про функцию dez2007 Помощь студентам 2 03.02.2009 18:46
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24
Вопрос про функцию FindWindow Dromok Общие вопросы Delphi 3 12.02.2007 23:00