«

»

C++. Функции. Передача параметров. Оператор return

Из данной статьи Вы узнаете о передаче параметров в функцию и о возврате результата с помощью оператора return. Рассмотрим теоретический материал.

Передача параметров в функцию

Обмен информацией между вызываемой и вызывающей функциями осуществляется с помощью механизма передачи параметров. Список_переменных, указанный в заголовке функции называется формальными параметрами  или просто параметрами функции. Список_переменных в операторе вызова функции — это фактические параметры или аргументы.

Передача параметров выполняется следующим образом. Вычисляются выражения, стоящие на месте фактических параметров. Затем формальным параметрам присваиваются значения фактических. Выполняется проверка типов и при необходимости выполняется их преобразование.

Передача параметров в функцию может осуществляться по значению и по адресу.

При передачи данных по значению функция работает с копиями фактических параметров, и доступна к исходным значениям аргументов у нее нет. При передачи по адресу в функцию передается не переменная, а ее адрес, и, следовательно, функция имеет доступ к ячейкам памяти, в которых хранятся аргументов. Таким образом, данные, переданные по значению, функция изменить не может, в отличие от данных, переданных по адресу.

Если требуется запретить изменение параметра внутри функции, используют модификатор const. Заголовок функции в общем виде будет выглядеть так:

тип имя_функции (const тип_переменной* имя_переменной, …)

Пример

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
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
using namespace std;
int f1(int i) //данные передаются по значению
{
return (i++);
}
int f2 (int* j) //данные передаются по адресу
{ //при подстановке фактического параметра,
//для получения его значения, применяется операция разадресации *
return((*j)++);
}
int f3 (const int* k) //изменение параметра не предусмотрено
{
return (*k);
}
int main ()
{
int a;
cout<<"a=";
cin>>a;
f1(a);
cout<<"a="<<a<<"\n";
f2(&a); //для передачи фактического параметра
//используется операция взятия адреса &
cout<<"a="<<a<<"\n";
f3(&a);
cout<<"a="<<a<<"\n";
system ("pause");
return 0;
}

Возврат результата с помощью оператора return

Возврат результата из функции в вызывающую ее функцию осуществляется оператором

return (значение);

Работает оператор так. Вычисляется значение выражения, указанного после return и преобразуется к типу возвращаемого функцией значения. Выполнение функции завершается, а вычисленное значение передается в вызывающую функцию. Любые операторы, следующие в функции за оператором return, игнорируются. Программа продолжает свою работу с оператора следующего за оператором вызова данной функции.

 Оператор return может отсутствовать в функциях типа void, если возврат происходит перед закрывающейся фигурной скобкой, и в функции main.

Также функция может содержать несколько операторов return, если это определенно потребностями алгоритма. Например, в следующей программе функция f сравнивает значение переменной с нулем. Если число положительное, то в программу передается значение равное 1, если отрицательное, то -1, а если нулевое, то 0.

 

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
27
#include "stdafx.h"
#include <iostream>
using namespace std;
int f(int a)
{
if (a>0) return 1;
else if (a<0) return -1;
else return 0;
}
//функцию можно переписать так
//int f(int a)
//{ int r;
//if (a>0) r=1;
//else if (a<0) r=-1;
//else r=0;
//return(r);
//}
int main ()
{
int b;
cout<<"b=";
cin>>b;
if (f(b)==1) cout<<"positive value \n";
else if (f(b)==-1) cout<<"negative value \n";
else cout<<"zero value \n";
system ("pause");
}//в функции main отсутствует оператор return

Этот урок не последний в теме «функции». Но, что касается передачи параметров и оператора return, то думаю этого вполне достаточно для дальнейшего изучения C++.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вы можете использовать эти теги HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Проверка на человечность *