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

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


funkcii

Различия

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

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

funkcii [2010/09/15 20:02] (текущий)
Строка 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 · Последние изменения: 2010/09/15 20:02 (внешнее изменение)