Инструменты пользователя

Инструменты сайта


funkcii

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

funkcii [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== Введение в функции ======
 +**Функция** - специальная конструкция, с помощью которой какой-либо фрагмент кода повторяющийся в программе два или более раз выносится за тело программы. Этот фрагмент получает собственное имя и, в дальнейшем, для того, чтобы воспользоваться вынесенным кодом, необходимо будет указать это имя.
 +====== Синтаксис объявления ======
 +Существует два способа объявления функции: 
  
 +  - Функция объявляется до функции main.
 +  - Функция объявляется с помощью прототипа, а после функции main, описывается тело объявленной функции.
 +<file>
 +возвращаемое_значение имя_функции (параметры)
 +{
 + блок_повторяющегося_кода (тело);
 +}</file>
 +<note important>Нельзя создавать одну функцию внутри другой.</note>
 +<note important> Нельзя вызвать функцию до ее объявления.</note>
 +====== return ======
 +Для возвращения Значения из функции в программу на то место, из которого была вызвана эта функция, используется оператор return. Синтаксис возврата таков: 
 +<file>
 +return значение;
 +</file>
 +Если функция не возвращает никаких значений, то оператор return можно использовать просто для остановки функции, для этого просто пишем:
 +  return; // в данном случае return отработает для функции, как break для цикла.
 +
 +Запомните важные моменты обращения с return: 
 +  - Операторов возврата может быть несколько (в зависимости от ситуации), но отработает только один из них.
 +  - Если сработал return (вне зависимости от формы), все что расположено в функции ниже него уже не отработает. Функция exit(1) описанная в stdlib.h, приводит к завершению программы.
 +  - Если тип возвращаемый функцией не void, то необходимо ВСЕГДА использовать форму: **return значение;**
 +
 +====== Оператор return (прерывание выполнения программы) ======
 +Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:
 +
 +<file>
 +return [выражение] ;
 +</file>
 +
 +Значение выражения, если оно задано, возвращается в вызывающую функцию в качестве значения вызываемой функции. Если выражение опущено, то возвращаемое значение не определено. Выражение может быть заключено в круглые скобки, хотя их наличие не обязательно.
 +
 +Если в какой-либо функции отсутствует оператор return, то передача управления в вызывающую функцию происходит после выполнения последнего оператора вызываемой функции. При этом возвращаемое значение не определено. Если функция не должна иметь возвращаемого значения, то ее нужно объявлять с типом void.
 +
 +Таким образом, использование оператора return необходимо либо для немедленного выхода из функции, либо для передачи возвращаемого значения.
 +
 +Пример:
 +
 +<file>
 +        int sum (int a, int b)
 +        {   renurn (a+b);    }
 +</file>
 +
 +Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.
 +
 +Пример:
 +
 +<file>
 +     void prov (int a, double b)
 +      double c;
 +        if (a<3) return; else if (b>10) return;
 +             else { c=a+b;
 +                    if ((2*c-b)==11) return;
 +                   }
 +      }
 +</file>
 +
 +В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.
 +====== Передача аргументов функциям ======
 +Поговорим, о том, что происходит в оперативной памяти. Аргументы, которые указываются при определении функции, называются формальными. Это связанно с тем что, они создаются в момент вызова функции в оперативной памяти. При выходе из функции такие параметры будут уничтожены. Поэтому, если в другой функции программы будут параметры с тем же именем, то конфликта не будет.
 +===== Передача аргументов функциям по значению =====
 +Передача аргументов функциям по значению - т.е. передаваемые значения просто копируются.
 +===== Передача аргументов функциям по указателю =====
 +Так как в C передача аргументов функциям осуществляется "по значению", вызванная процедура не имеет непосредственной возможности изменить переменную из вызывающей программы. Что же делать, если вам действительно надо изменить аргумент?
 +===== Передача аргументов функциям по ссылке =====
 +Ссылочные переменные используются достаточно редко: значительно удобнее использовать саму переменную, чем ссылку на нее. В качестве параметров функции ссылки имеют более широкое применение. Ссылки особенно полезны в функциях, возвращающих несколько объектов (значений).
 +
 +====== Аргументы (параметры) по умолчанию ======
 +Формальному параметру функции может быть задан аргумент по умолчанию. Это означает, что в данный аргумент значение при вызове можно не передавать. В этом случае будет использовано значение по умолчанию. 
 +
 +Общий синтаксис для реализации такого подхода имеет следующий вид: 
 +<file>
 +тип_возвращаемого_значения имя_функции(тип_арг имя_арг=значение_по_умолчанию)
 +</file>    
 +Здесь значение_по_умолчанию и есть значение, присваиваемое аргументу, если он опущен при вызове. Разумеется, аргументов по умолчанию может быть несколько: 
 +<file>
 +тип_возвращаемого_значения имя_функции(арг1=значение, арг2=значение)
 +</file>
 +**Аргументами по умолчанию могут быть аргументы, начиная с правого конца списка параметров функции и далее последовательно слева направо без перерывов**.Например: 
 +<file>
 +void foot (int i, int j = 7) ;      //допустимо
 +
 +void foot (int i, int j = 2, int k) ;        //недопустимо
 +
 +void foot (int i, int j = 3, int k = 7) ;    //допустимо
 +
 +void foot (int i = 1, int j = 2, int k = 3); //допустимо
 +
 +void foot (int i=- 3, int j);                //недопустимо
 +</file>
 +Рассмотрим пример на работу с параметрами по умолчанию.
 +<file>
 +#include <iostream>
 +using namespaсe std;
 +
 +// рисует линию из звездочек длиной count
 +void Star(int count=20){
 + for(int i=0;i<count;i++)
 + cout<<'*';
 + cout<<"\n\n";
 +}
 +
 +void main(){
 +
 + Star(); // показ линии из 20 звездочек
 + Star(5); // показ линии из пяти звездочек
 +
 +}
 +</file>
funkcii.txt · Последнее изменение: 2020/06/13 13:45 (внешнее изменение)