Форум программистов, компьютерный форум CyberForum.ru

Значение оператора return - C++

Восстановить пароль Регистрация
 
 
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 20:13     Значение оператора return #1
Прочитал про оператор return, но не очень понятно про его.
Как он используется ниже (объясните), может после этого примера что-либо прояснится относительно return.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <conio.h>
int MinMax (int a, int b, int Max)  //a, b, c - это формальные параметры.
  {
  if (a > b) {Max = a; return b;}
  else       {Max = b; return a;}
  }
 
main()
  {
  int N, M, min, max;
  printf("Введите два целых числа:\n");
  scanf("%d%d", &N, &M);
  min = MinMax (N, M, max);  //вызов функции  //N, M, max - это фактические параметры и Первый фактический параметр используется внутри функции вместо первого формального (см. выше) параметра, и т.д.
  printf("Наименьшее - %d, наибольшее - %d\n", min, max);
  getch();
  }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
04.05.2013, 20:19     Значение оператора return #2
Цитата Сообщение от jaketaylor Посмотреть сообщение
if (a > b) {Max = a; return b;}
если а больше б, то функция возвращяет б, и управление передаёт дальше.
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 20:20  [ТС]     Значение оператора return #3
Цитата Сообщение от SeregaC++ Посмотреть сообщение
Ретурн завершает функцию
Я про это прочитал.
return возвращает значение b или a (в зависимости от условия: a > b), но КУДА и в какую переменную оно возвращает?
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
04.05.2013, 20:22     Значение оператора return #4
Цитата Сообщение от jaketaylor Посмотреть сообщение
но КУДА и в какую переменную оно возвращает?
в то место где была вызвана эта функция

Добавлено через 1 минуту
Цитата Сообщение от jaketaylor Посмотреть сообщение
min = MinMax (N, M, max);
в этом случае результат сохраняется в переменной мин.
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 20:26  [ТС]     Значение оператора return #5
Цитата Сообщение от SeregaC++ Посмотреть сообщение
в этом случае результат сохраняется в переменной мин.
Что-то я запутался.
C++
1
2
3
  
if (a > b) {Max = a; return b;}
  else       {Max = b; return a;}
Допустим a=5, b=7.
Т.к. 5<7, то переменной Max присваивается значение 7 ({Max = b; return a;}), а return a возвращается значение переменной а (а = 5) в min.
В min, т.к. в начале в MinMax, а этот код min = MinMax (N, M, max); ниже присваивает переменной min значение MinMax. Я правильно понял?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.05.2013, 20:30     Значение оператора return #6
Цитата Сообщение от SeregaC++ Посмотреть сообщение
в этом случае результат сохраняется в переменной мин.
не совсем так. return возвращает значение функции в правый операнд оператора присваивания, а уже он присваивает значение правого операнда левому, то есть переменной min.

Добавлено через 1 минуту
Цитата Сообщение от jaketaylor Посмотреть сообщение
Допустим a=5, b=7.
Т.к. 5<7, то переменной Max присваивается значение 7 ({Max = b; return a;}), а return a возвращается значение переменной а (а = 5) в min? Почему в min?
Нет. Переменной max ничего не присваивается, так как она передана по значению.
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 20:34  [ТС]     Значение оператора return #7
Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. Переменной max ничего не присваивается,
А как же Max = b?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.05.2013, 20:37     Значение оператора return #8
Цитата Сообщение от jaketaylor Посмотреть сообщение
А как же Max = b?
Ни как. Параметр-значение не изменен.
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 20:40  [ТС]     Значение оператора return #9
Цитата Сообщение от taras atavin Посмотреть сообщение
Ни как. Параметр-значение не изменен.
Тогда зачем это писать, можно было бы записать так?
C++
1
2
  if (a > b) {return b;}
  else       {return a;}
У меня ошибка в коде. Надо так:
C++
1
int MinMax (int a, int b, int &Max)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.05.2013, 20:46     Значение оператора return #10
Цитата Сообщение от jaketaylor Посмотреть сообщение
Тогда зачем это писать,
А чёрт его знает.
Цитата Сообщение от jaketaylor Посмотреть сообщение
можно было бы записать так?
C++
1
2
* if (a > b) {return b;}
* else * * * {return a;}
C++
1
 
нет, надо было написать
Цитата Сообщение от jaketaylor Посмотреть сообщение
C++
1
int MinMax (int a, int b, int &Max)
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
04.05.2013, 21:01  [ТС]     Значение оператора return #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Сообщение от jaketaylor
можно было бы записать так?
Код C++
1
2
* if (a > b) {return b;}
* else * * * {return a;}
Код C++
1
2
нет, надо было написать
Сообщение от jaketaylor
Код C++
1
int MinMax (int a, int b, int &Max)
Не уловил логики

Добавлено через 7 минут
Я вроде разобрался.
Запускаем программу.
1) Ввожу числа по очереди (например ввожу):
25 (Enter)
3 (Enter)
2) Получается так (исходя из кода):
a = 25;
b = 3;
3) Т.к. 25 > 3 (a > b), то в параметр Max заносится число 25, а return b возвращает в функцию MinMax значение b, которое равно 3.
4)
C++
1
min = MinMax (N, M, max);
min присваивается число 3.

Блин, не понятно.
Разъясните кто-нибудь
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.05.2013, 22:48     Значение оператора return #12
Господитыбожемой. <цитата Дейкстры Джоеля про рекурсию и указатели>

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int MinMax(int a, int b, int &max)
{
    if (a > b)
    {
        max = a;
        return b;
    }
    else
    {
        max = b;
        return a;
    }
}
 
int main()
{
    int x = 3;
    int y = 4;
    int w, z;
 
    w = MinMax(x, y, z);
}
Переменные x и y из main() остаются теми же. Переменная w получает возвращаемое значение этого вызова функции MinMax() — минимум тех двух чисел, то есть 3. Переменная z получает то значение, которое ей присвоили внутри MinMax() — максимум, то есть 4.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.05.2013, 22:54     Значение оператора return #13
jaketaylor, http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx а вообще с программированием знакомы? На чем писали до плюсов? Паскаль, Асм, Сшарп или еще что-нибудь??
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
09.05.2013, 22:26  [ТС]     Значение оператора return #14
Цитата Сообщение от go Посмотреть сообщение
jaketaylor, http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx а вообще с программированием знакомы? На чем писали до плюсов? Паскаль, Асм, Сшарп или еще что-нибудь??
asm
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
09.05.2013, 22:37     Значение оператора return #15
Цитата Сообщение от jaketaylor Посмотреть сообщение
asm
забудь все
другой подход другая парадигма
особенно меня мучало отсутствие условных переходов
пока не научился мыслить по другому

если тебе это поможет то вот это
C++
1
return  23;
превратится на ассемблере вот в такой код

Assembler
1
2
mov eax,23;
ret;
возвращаемое значение в регистре eax если не влазит то в паре eax edx
nonedark2008
09.05.2013, 22:54
  #16

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
если тебе это поможет то вот это
Надо человеку предложить писать сначало на C++, скомпилировать, деассемблировать, а потом смотреть что в итоге вышло =)

ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
09.05.2013, 23:06     Значение оператора return #17
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Надо человеку предложить писать сначало на C++, скомпилировать, деассемблировать, а потом смотреть что в итоге вышло =)
и что это изменит?
для платформы х86 возвращаемое значение лежит в EAX ( или во флаге переноса если возвращается bool)
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 67
10.05.2013, 03:07  [ТС]     Значение оператора return #18
Как я понял, то return просто "приравнивает" значение b переменной MinMax. Аналогично b == MinMax.
Код
int MinMax (int a, int b, int Max)  //a, b, c - это формальные параметры.
  {
  if (a > b) {Max = a; return b;}
  else       {Max = b; return a;}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.05.2013, 11:42     Значение оператора return #19
Цитата Сообщение от taras atavin Посмотреть сообщение
return возвращает значение функции в правый операнд оператора присваивания
В общем случае никаких операторов присваивания может и не быть. Например при передаче результата функции как аргумента другой функции.

В коде ТС:
C++
1
2
3
4
5
int MinMax (int a, int b, int Max)  //a, b, c - это формальные параметры.
  {
  if (a > b) {Max = a; return b;}
  else       {Max = b; return a;}
  }
функция вернет минимум, но вот максимум не вернет никак. Так как Max локальна в пределах функции. Нужно использовать например передачу по ссылке. Собственно об этом уже говорили в теме.

Объяснять новичку плюсовый код через ассемблерные команды - это вообще лютый трэш. Знай ТС асм в нужном объеме, вопросов про return не возникло бы вовсе.

Цитата Сообщение от jaketaylor Посмотреть сообщение
Как я понял, то return просто "приравнивает" значение b переменной MinMax. Аналогично b == MinMax.
MinMax - это функция, а не переменная. У функции есть аргументы, а есть возвращаемое значение. Оно и задается оператором return. Вот почитайте например у мелкомягких.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 12:13     Значение оператора return
Еще ссылки по теме:

Значение якобы возвращённое функцией при опущенном return C++
C++ Значение указателей в условии оператора
Перегрузка оператора return C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
10.05.2013, 12:13     Значение оператора return #20
Цитата Сообщение от Tulosba Посмотреть сообщение
Объяснять новичку плюсовый код через ассемблерные команды - это вообще лютый трэш. Знай ТС асм в нужном объеме, вопросов про return не возникло бы вовсе.
я исходил из того что раньше он писал на ассемблере

Цитата Сообщение от go Посмотреть сообщение
На чем писали до плюсов?
Цитата Сообщение от jaketaylor Посмотреть сообщение
asm
Yandex
Объявления
10.05.2013, 12:13     Значение оператора return
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru