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

В чем разница между функциями возвращающими и не возвращающими значения - C++

Восстановить пароль Регистрация
 
 
lyubiteltyazha
0 / 0 / 0
Регистрация: 15.07.2016
Сообщений: 7
09.08.2016, 08:57     В чем разница между функциями возвращающими и не возвращающими значения #1
Подскажите еще, пожалуйста, по функциям. Есть два вида, которые возвращают значение и которые не возвращают. Так вот у меня вопрос, в чем между ними разница? В примерах обе функции выводят значение на экран, а вот что и куда возвращается или не возвращается не могу разобраться.

Пример 1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void faktorial(int numb)// заголовок функции
{
    int rezult = 1; // инициализируем переменную rezult значением 1
    for (int i = 1; i <= numb; i++) // цикл вычисления значения n!
        rezult *= i; // накапливаем произведение в переменной rezult 
    cout << numb << "! = " << rezult << endl; // печать значения n!
}
 
int main(int argc, char* argv[])
{
    int digit; // переменная для хранения значения n!
    cout << "Enter number: ";
    cin >> digit;
    faktorial(digit);// запуск функции нахождения факториала
    system("pause");
    return 0;
}
Пример 2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int faktorial(int numb)// заголовок функции
{
    int rezult = 1; // инициализируем переменную rezult значением 1
    for (int i = 1; i <= numb; i++) // цикл вычисления значения n!
        rezult *= i; // накапливаем произведение в переменной rezult 
    return rezult; // передаём значение факториала в главную функцию
}
 
int main(int argc, char* argv[])
{
    int digit; // переменная для хранения значения n!
    cout << "Enter number: ";
    cin >> digit;
    cout << digit << "! = " << faktorial(digit) << endl;// запуск функции нахождения факториала
    system("pause");
    return 0;
}
И еще вопрос. В функции faktorial() есть переменная numb (в цикле), но ее значение нигде не задается. И в чем отличие между параметром функции и ее аргументом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2016, 08:57     В чем разница между функциями возвращающими и не возвращающими значения
Посмотрите здесь:

C++ Работа с функциями, возвращающими значения. Передача параметров по значению
C++ Работа с функциями, возвращающими значения
Работа с функциями, возвращающими значения. Передача параметров по значению C++
Работа с функциями, возвращающими значения. Передача параметров по значению C++
«Работа с функциями, возвращающими значения. Передача параметров по значению» C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
09.08.2016, 12:14     В чем разница между функциями возвращающими и не возвращающими значения #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void faktorial(int numb)
{
int rezult = 1;
for (int i = 1; i <= numb; i++) 
rezult *= i; 
cout << numb << "! = " << rezult << endl; 
}
 
int main(int argc, char* argv[])
{
int digit;
cout << "Enter number: ";
cin >> digit;
faktorial(digit);// digit - это переменная numb в функции. Тут вы передаёте в функцию переменную, 
//и nubm содержит копию этой переменной
system("pause");
return 0;
}
Добавлено через 11 минут
Вот пример проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
using namespace std;
 
int func1() // int указывает, какой тип будет возвращаться, в данном случае целое число
{
    int a = 55;
    //return ""Hello WOrld"; //я не могу так написать, потому что функция должна вернуть int, но не const char*
    return a;//тут возвращается переменная типа int - всё нормально
    
}
 
void func2()
{
    int a = 77;
    //return a; // я не могу так написать, так как func2() ничего не возвращает, в отличие от func1(), там возвращается int
}
 
int main()
{
    int n = func1(); //n принимает целое число, которое возвращает func1() - переменная a
    cout << n << endl;
//  n = func2(); //я не могу так написать, так как fun2() не возвращает переменную int
    func2();
    return 0;
}
_Ivana
2189 / 1394 / 124
Регистрация: 01.03.2013
Сообщений: 4,151
Записей в блоге: 2
09.08.2016, 13:17     В чем разница между функциями возвращающими и не возвращающими значения #3
Цитата Сообщение от lyubiteltyazha Посмотреть сообщение
В чем разница между функциями возвращающими и не возвращающими значения
В том, что вторых не бывает.
ELVY
1 / 1 / 0
Регистрация: 02.08.2016
Сообщений: 20
09.08.2016, 14:16     В чем разница между функциями возвращающими и не возвращающими значения #4
Первая функция не возвращает никакого значения, потому что она его уже вывела (cout).
Во второй же функции вывода значения нету, поэтому его нужна вернуть (return).
Другими же словами, смотри:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int sum(int a, int b);
 
int main()
{
    int a = sum(5, 4);
        return 0;
}
 
int sum(int a, int b)
{
    return a + b;
}
Здесь возвращается сумма переменных a и b, но если записать так, то return не нужен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
void sum(int a, int b);
 
int main()
{
    sum(5, 4);
    return 0;
}
 
void sum(int a, int b)
{
    cout << a + b;
}
spymonk
 Аватар для spymonk
1 / 1 / 0
Регистрация: 08.06.2016
Сообщений: 31
09.08.2016, 15:29     В чем разница между функциями возвращающими и не возвращающими значения #5
В основном, отличается использованием ключевого слова return.
Возвращающая без него вернет значение.
Невозвращающая возвращает значение с помощью return
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
09.08.2016, 15:43     В чем разница между функциями возвращающими и не возвращающими значения #6
По мне так самая главная разница между данными функциями (которая возвращает значение и которая не возвращает) в том, что вторую (которая не возвращает значения) нельзя использовать в выражениях. Если проводить аналоги с другими языками программирования то функция которая не возвращает значения это процедура. Отсюда немного различная алгоритмика их использования.
lyubiteltyazha
0 / 0 / 0
Регистрация: 15.07.2016
Сообщений: 7
09.08.2016, 15:55  [ТС]     В чем разница между функциями возвращающими и не возвращающими значения #7
Т.е. насколько я понял, в тех функциях, которые НЕ возвращают никаких результатов, эти результаты нигде не остаются физически, ни в памяти, ни на экране. Допустим просто посчитала сумму и тут же забыла (если не выводить с помощью cout). А если мы применяем return, то результаты выполнения функции можно использовать где-то в другом месте программы. Ну то есть я хотел сказать, что если мы используем ф-ю, которая возвращает значение, но не пишем оператор cout, то значение ф-ции никуда не пропадает. Или я неправильно рассуждаю?
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
09.08.2016, 16:41     В чем разница между функциями возвращающими и не возвращающими значения #8
Основная мысль верна. Но не стоит забывать также про параметры.
Т.к. параметры могут передаются не только по значению но и ссылками с указателями . В таких случаях изменения которые были сделаны над значением параметра (ссылка) или данными на которые параметр указывает (указатель) сохраняются.
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
09.08.2016, 17:43     В чем разница между функциями возвращающими и не возвращающими значения #9
Цитата Сообщение от lyubiteltyazha Посмотреть сообщение
е. насколько я понял, в тех функциях, которые НЕ возвращают никаких результатов, эти результаты нигде не остаются физически
Не правильно.

Вот функция, которая не возвращает результата:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void myFunc(int &a, int &b, int &c)
{
    a = 1; b = 1; c = 1;
}
 
int main(int argc, char *argv[])
{
    int a = 0;
    int b = 0;
    int c = 0;
    myFunc(a, b, c);
 
    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "c = " << c  << std::endl;
}
Результат:
C++
1
2
3
a = 1
b = 1
c = 1
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
09.08.2016, 21:05     В чем разница между функциями возвращающими и не возвращающими значения #10
Цитата Сообщение от HedgehogLu Посмотреть сообщение
вторую (которая не возвращает значения) нельзя использовать в выражениях.
Если вспомнить что такое "выражение" (expression) в С++, то оказывается, что можно Не придирка - просто уточнение.
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
09.08.2016, 22:22     В чем разница между функциями возвращающими и не возвращающими значения #11
Цитата Сообщение от _Ivana Посмотреть сообщение
В том, что вторых не бывает.
вам стоит подучить с++
_Ivana
2189 / 1394 / 124
Регистрация: 01.03.2013
Сообщений: 4,151
Записей в блоге: 2
10.08.2016, 00:38     В чем разница между функциями возвращающими и не возвращающими значения #12
hoggy, приведете пример?
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
10.08.2016, 02:19     В чем разница между функциями возвращающими и не возвращающими значения #13
значение не возвращается :
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <intrin.h>
 
inline void func() {
    void* _idt;
    __sidt(&_idt);// для х64 от ms
//.....
}
 
int main(int argc, char *argv[])
{
    func();
        setlocale(LC_ALL, "");
        return 0;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
8: 
     9: inline void func() {
00007FF708D91530 48 83 EC 18                     sub         rsp,18h  
    10:     void* _idt;
    11:     __sidt(&_idt);
00007FF708D91534 0F 01 0C 24                     sidt        tbyte ptr [rsp]  
    12: }
00007FF708D91538 48 83 C4 18                     add         rsp,18h  
00007FF708D9153C C3                                  ret  
 
15: int main(int argc, char *argv[])
    16: {
00007FF708D913E0 48 89 54 24 10                   mov         qword ptr [rsp+10h],rdx  
00007FF708D913E5 89 4C 24 08                       mov         dword ptr [rsp+8],ecx  
00007FF708D913E9 48 81 EC A8 00 00 00          sub         rsp,0A8h  
00007FF708D913F0 48 C7 44 24 40 FE FF FF FF  mov         qword ptr [rsp+40h],0FFFFFFFFFFFFFFFEh  
    17:     func();
00007FF708D913F9 E8 EF 04 FE FF                   call        func (07FF708D718EDh)  
    18:     setlocale(LC_ALL, "");
00007FF708D913FE 48 8D 15 9C D0 02 00          lea         rdx,[qt_meta_data_QServerPipe+521h (07FF708DBE4A1h)]  
00007FF708D91405 33 C9                                xor         ecx,ecx  
00007FF708D91407 FF 15 03 AF 04 00               call        qword ptr [__imp_setlocale (07FF708DDC310h)]  
.......
_Ivana
2189 / 1394 / 124
Регистрация: 01.03.2013
Сообщений: 4,151
Записей в блоге: 2
10.08.2016, 06:10     В чем разница между функциями возвращающими и не возвращающими значения #14
Попытался "подучить С++" - не смог Ну не верить же тому что пишут в учебниках, в самом деле Поэтому выбираю оставить свои заблуждения - значение из функции возвращается всегда, я могу прочитать его тип через typeid, а что не могу его скастить, передать и использовать в выражениях - кост особенности выбранной в С++ семантики типа void...
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
10.08.2016, 08:59     В чем разница между функциями возвращающими и не возвращающими значения #15
Цитата Сообщение от _Ivana Посмотреть сообщение
а что не могу его скастить, передать и использовать в выражениях
Да почему ж нельзя в выражениях-то использовать? Откуда вы взяли это вообще?
Может для кого-то будет сюрпризом, но вот этот код - корректный код на С++:
C++
1
2
3
4
5
6
7
void foo() {  /*...*/  }
void bar() {  /*...*/  }
 
void test(bool f) 
{
    return f ? foo() : bar();
}
И вот это корректный код:
C++
1
int v = (foo(), bar(), 42);
И вот это:
C++
1
using T = decltype(foo());
И вот это:
C++
1
static_cast<void>(foo());
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,923
Записей в блоге: 1
Завершенные тесты: 1
10.08.2016, 09:15     В чем разница между функциями возвращающими и не возвращающими значения #16
Цитата Сообщение от DrOffset Посмотреть сообщение
Если вспомнить что такое "выражение"
где можно подробно об этом почитать?
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
10.08.2016, 09:18     В чем разница между функциями возвращающими и не возвращающими значения #17
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
где можно подробно об этом почитать?
В стандарте C++.
SmittWesson
 Аватар для SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,273
10.08.2016, 09:19     В чем разница между функциями возвращающими и не возвращающими значения #18
Цитата Сообщение от lyubiteltyazha Посмотреть сообщение
Есть два вида, которые возвращают значение и которые не возвращают.
Вообще-то их три вида. Возврат значения через указатель:
C++
1
2
3
4
5
6
7
void faktorial(int & numb)// заголовок функции
{
    int rezult = 1; // инициализируем переменную rezult значением 1
    for (int i = 1; i <= numb; i++) // цикл вычисления значения n!
        rezult *= i; // накапливаем произведение в переменной rezult 
    numb = result;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,687
10.08.2016, 10:00     В чем разница между функциями возвращающими и не возвращающими значения #19
Цитата Сообщение от lyubiteltyazha Посмотреть сообщение
И в чем отличие между параметром функции и ее аргументом?
Ну, по стандарту параметр - это объект или ссылка, объявленный в списке параметров объявления или определения функции, а аргумент - это выражение, стоящее в списке аргументов при вызове функции.
А вот авторы учебников считают по-разному. Страуструп называет параметры формальными аргументами.
Для Праты что аргументы, что параметры - все едино, он считает, что это одно и то же.
Липпман предпочитает стандарта придерживаться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2016, 10:59     В чем разница между функциями возвращающими и не возвращающими значения
Еще ссылки по теме:

C++ В чем разница между функциями strcat() и strcpy()?
C++ В чем разница между функциями, прототипы которых имеют вид?
C++ В чем разница между типом функции и типом возвращаемого значения?

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

Или воспользуйтесь поиском по форуму:
HelicopterK52
634 / 177 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
10.08.2016, 10:59     В чем разница между функциями возвращающими и не возвращающими значения #20
А есть еще no-return функции:
C++
1
2
3
4
5
[[noreturn]]
void foo()
{
   //...
}
Для этого монстра не то что возврат значения, даже возврат управления - UB
Yandex
Объявления
10.08.2016, 10:59     В чем разница между функциями возвращающими и не возвращающими значения
Ответ Создать тему
Опции темы

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