Функция может содержать несколько операторов return
Учебные материалы


Функция может содержать несколько операторов return



Карта сайта tomhogan.com ^

Глобальные переменные


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

Возвращаемое значение


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

return [ выражение ];


Функция может содержать несколько операторов return. Если функция описана как void, выражение не указывается. Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.

Пример 51


int f1(){return 1;} //правильно
void f2(){return 1;} /*неправильно, f2 не должна возвращать значение*/
double f3{return 1;}/*правильно, 1 преобразуется к типу double*/
ВНИМАНИЕ!
Нельзя возвращать из функции указатель на локальную переменную.

Пример 52


int* f()
{int a = 5;
return &a;} // нельзя!
^

4.1.2. Параметры функции


Механизм параметров является основным способом обмена информацией между вызываемой и вызывающей функциями. Параметры, перечисленные в заголовке описания функции, называются формальными, а записанные в операторе вызова функции – фактическими (или аргументами).
При вызове функции в первую очередь вычисляются выражения, стоящие на месте фактических параметров; затем в стеке выделяется память под формальные параметры функции в соответствии с их типом, и каждому из них присваивается значение соответствующего фактического параметра. При этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение.
Существует два вида передачи величин в функцию: по значению и по адресу.
При передаче по значению в стек заносятся копии значений фактических параметров, и операторы функции работают с этими копиями. Доступа к исходным значениям параметров у функции нет, а, следовательно, нет и возможности их изменить.
При передаче по адресу в стек заносятся копии адресов параметров, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения параметров.

Пример 53


#include
//объявление функции f
void f(int i, int* j, int& k);
int main()
{
int i = 1, j = 2, k = 3;
cout <<"i j k\n";
cout << i <<' '<< j <<' '<< k <<'\n';
f(i, &j, k);
cout << i <<' '<< j <<' '<< k;
}
// определение функции f
void f(int i, int* j, int& k)
{
i++; (*j)++; k++;
}
Результат работы программы:
i j k
1 2 3
1 3 4
В примере 53 первый параметр (i) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования. Третий параметр (k) передается по адресу с помощью ссылки.
При передаче по ссылке в функцию передается адрес указанного при вызове параметра, а внутри функции все обращения к параметру неявно разыменовываются. Поэтому использование ссылок вместо указателей улучшает читаемость программы. Использование ссылок вместо передачи по значению более эффективно, поскольку не требует копирования параметров.
Если требуется запретить изменение параметра, используется модификатор const.

Пример 54


int f(const char*);
char* t(char* a, const int* b);
СОВЕТ!
Рекомендуется указывать const перед всеми параметрами, изменение которых в функции не предусмотрено. Это облегчает отладку. Кроме того, на место параметра типа const& может передаваться константа.
Параметры, передаваемые в функцию, могут быть любого типа (например, вещественного, структурой, перечислением, объединением, указателем), кроме массива или функции, которые передаются с помощью указателей.
^

4.2. Вопросы для самоконтроля


  1. В каких случаях используют функции в С++.

  2. Из каких частей состоит функция.

  3. Формальные и фактические параметры.

  4. Глобальные т локальные параметры.

  5. Прототип функции.

  6. Передача одномерных массивов в функции. Примеры.

  7. Передача многомерных массивов в функции. Примеры.

  8. В каком месте программы необходимо объявлять функцию.

  9. Перечислите вида передачи величин в функцию.

  10. Использование оператора return в функции.

  11. Что определяет тип функции.

  12. Чем объявление функции отличается от определения функции.

  13. Каким образом необходимо описать функцию, чтобы её выражение не указывалось.

  14. Как можно явно задать область видимости функции.

  15. С какой целью используется модификатор inline.



edu 2018 год. Все права принадлежат их авторам! Главная