Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
1

Значение оператора return

04.05.2013, 20:13. Просмотров 1213. Ответов 21
Метки нет (Все метки)

Прочитал про оператор 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();
  }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 20:13
Ответы с готовыми решениями:

Значение пустого оператора return
Скажите для чего он нужен вообще? допустим: void Func(){ if(){ //что-то делаем ...

Назначение оператора return
Клянусь вам что прочёс огромное кол-во статей, форумов и т.д. про функцию return, но так и не понял...

Перегрузка оператора return
Можно ли перегрузить оператор return? Что по умолчанию в его теле? Тот же вопрос и с goto.

Значение, возвращаемое return, не соответствует ожиданиям
Добрый вечер! Подскажите, пожалуйста, что я делаю не так? Почему return возвращает 2, а не c?...

В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста...

21
Issues
432 / 367 / 149
Регистрация: 06.08.2012
Сообщений: 961
04.05.2013, 20:19 2
Цитата Сообщение от jaketaylor Посмотреть сообщение
if (a > b) {Max = a; return b;}
если а больше б, то функция возвращяет б, и управление передаёт дальше.
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
04.05.2013, 20:20  [ТС] 3
Цитата Сообщение от SeregaC++ Посмотреть сообщение
Ретурн завершает функцию
Я про это прочитал.
return возвращает значение b или a (в зависимости от условия: a > b), но КУДА и в какую переменную оно возвращает?
0
Issues
432 / 367 / 149
Регистрация: 06.08.2012
Сообщений: 961
04.05.2013, 20:22 4
Цитата Сообщение от jaketaylor Посмотреть сообщение
но КУДА и в какую переменную оно возвращает?
в то место где была вызвана эта функция

Добавлено через 1 минуту
Цитата Сообщение от jaketaylor Посмотреть сообщение
min = MinMax (N, M, max);
в этом случае результат сохраняется в переменной мин.
0
04.05.2013, 20:22
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
04.05.2013, 20:26  [ТС] 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. Я правильно понял?
0
taras atavin
4199 / 1776 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
04.05.2013, 20:30 6
Цитата Сообщение от SeregaC++ Посмотреть сообщение
в этом случае результат сохраняется в переменной мин.
не совсем так. return возвращает значение функции в правый операнд оператора присваивания, а уже он присваивает значение правого операнда левому, то есть переменной min.

Добавлено через 1 минуту
Цитата Сообщение от jaketaylor Посмотреть сообщение
Допустим a=5, b=7.
Т.к. 5<7, то переменной Max присваивается значение 7 ({Max = b; return a;}), а return a возвращается значение переменной а (а = 5) в min? Почему в min?
Нет. Переменной max ничего не присваивается, так как она передана по значению.
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
04.05.2013, 20:34  [ТС] 7
Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. Переменной max ничего не присваивается,
А как же Max = b?
0
taras atavin
4199 / 1776 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
04.05.2013, 20:37 8
Цитата Сообщение от jaketaylor Посмотреть сообщение
А как же Max = b?
Ни как. Параметр-значение не изменен.
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
04.05.2013, 20:40  [ТС] 9
Цитата Сообщение от taras atavin Посмотреть сообщение
Ни как. Параметр-значение не изменен.
Тогда зачем это писать, можно было бы записать так?
C++
1
2
  if (a > b) {return b;}
  else       {return a;}
У меня ошибка в коде. Надо так:
C++
1
int MinMax (int a, int b, int &Max)
0
taras atavin
4199 / 1776 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
04.05.2013, 20:46 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)
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
04.05.2013, 21:01  [ТС] 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.

Блин, не понятно.
Разъясните кто-нибудь
0
OhMyGodSoLong
~ Эврика! ~
1248 / 997 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
04.05.2013, 22:48 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.
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
04.05.2013, 22:54 13
jaketaylor, http://msdn.microsoft.com/en-us/library/k68ktdwf(v=vs.80).aspx а вообще с программированием знакомы? На чем писали до плюсов? Паскаль, Асм, Сшарп или еще что-нибудь??
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
09.05.2013, 22:26  [ТС] 14
Цитата Сообщение от go Посмотреть сообщение
jaketaylor, http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx а вообще с программированием знакомы? На чем писали до плюсов? Паскаль, Асм, Сшарп или еще что-нибудь??
asm
0
ValeryS
Модератор
7848 / 5834 / 762
Регистрация: 14.02.2011
Сообщений: 20,041
Завершенные тесты: 1
09.05.2013, 22:37 15
Цитата Сообщение от jaketaylor Посмотреть сообщение
asm
забудь все
другой подход другая парадигма
особенно меня мучало отсутствие условных переходов
пока не научился мыслить по другому

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

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

Не по теме:

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

0
ValeryS
Модератор
7848 / 5834 / 762
Регистрация: 14.02.2011
Сообщений: 20,041
Завершенные тесты: 1
09.05.2013, 23:06 17
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Надо человеку предложить писать сначало на C++, скомпилировать, деассемблировать, а потом смотреть что в итоге вышло =)
и что это изменит?
для платформы х86 возвращаемое значение лежит в EAX ( или во флаге переноса если возвращается bool)
0
jaketaylor
1 / 1 / 1
Регистрация: 22.05.2011
Сообщений: 69
10.05.2013, 03:07  [ТС] 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;}
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.05.2013, 11:42 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. Вот почитайте например у мелкомягких.
0
ValeryS
Модератор
7848 / 5834 / 762
Регистрация: 14.02.2011
Сообщений: 20,041
Завершенные тесты: 1
10.05.2013, 12:13 20
Цитата Сообщение от Tulosba Посмотреть сообщение
Объяснять новичку плюсовый код через ассемблерные команды - это вообще лютый трэш. Знай ТС асм в нужном объеме, вопросов про return не возникло бы вовсе.
я исходил из того что раньше он писал на ассемблере

Цитата Сообщение от go Посмотреть сообщение
На чем писали до плюсов?
Цитата Сообщение от jaketaylor Посмотреть сообщение
asm
0
10.05.2013, 12:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 12:13

Значение якобы возвращённое функцией при опущенном return
Что считается значением, возвращённым функцией, в которой опущен оператор `return`? Зачем...

Как вернуть только верхнее значение стека через return
Есть рекурсивная функция, которая возвращает определенное значение. Вопрос - как вернуть только...

Как сделать так, что если файл существует return true, если нет - return false
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru