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

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


Боковая панель

Связь

funkcii

Введение в функции

Функция - специальная конструкция, с помощью которой какой-либо фрагмент кода повторяющийся в программе два или более раз выносится за тело программы. Этот фрагмент получает собственное имя и, в дальнейшем, для того, чтобы воспользоваться вынесенным кодом, необходимо будет указать это имя.

Синтаксис объявления

Существует два способа объявления функции:

  1. Функция объявляется до функции main.
  2. Функция объявляется с помощью прототипа, а после функции main, описывается тело объявленной функции.
возвращаемое_значение имя_функции (параметры)
{
	блок_повторяющегося_кода (тело);
}
Нельзя создавать одну функцию внутри другой.
Нельзя вызвать функцию до ее объявления.

return

Для возвращения Значения из функции в программу на то место, из которого была вызвана эта функция, используется оператор return. Синтаксис возврата таков:

return значение;

Если функция не возвращает никаких значений, то оператор return можно использовать просто для остановки функции, для этого просто пишем:

return; // в данном случае return отработает для функции, как break для цикла.

Запомните важные моменты обращения с return:

  1. Операторов возврата может быть несколько (в зависимости от ситуации), но отработает только один из них.
  2. Если сработал return (вне зависимости от формы), все что расположено в функции ниже него уже не отработает. Функция exit(1) описанная в stdlib.h, приводит к завершению программы.
  3. Если тип возвращаемый функцией не void, то необходимо ВСЕГДА использовать форму: return значение;

Оператор return (прерывание выполнения программы)

Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:

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

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

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

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

Пример:

        int sum (int a, int b)
        {   renurn (a+b);    }

Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

Пример:

     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;
                   }
      }

В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.

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

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

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

Передача аргументов функциям по значению - т.е. передаваемые значения просто копируются.

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

Так как в C передача аргументов функциям осуществляется "по значению", вызванная процедура не имеет непосредственной возможности изменить переменную из вызывающей программы. Что же делать, если вам действительно надо изменить аргумент?

Передача аргументов функциям по ссылке

Ссылочные переменные используются достаточно редко: значительно удобнее использовать саму переменную, чем ссылку на нее. В качестве параметров функции ссылки имеют более широкое применение. Ссылки особенно полезны в функциях, возвращающих несколько объектов (значений).

Аргументы (параметры) по умолчанию

Формальному параметру функции может быть задан аргумент по умолчанию. Это означает, что в данный аргумент значение при вызове можно не передавать. В этом случае будет использовано значение по умолчанию.

Общий синтаксис для реализации такого подхода имеет следующий вид:

тип_возвращаемого_значения имя_функции(тип_арг имя_арг=значение_по_умолчанию)

Здесь значение_по_умолчанию и есть значение, присваиваемое аргументу, если он опущен при вызове. Разумеется, аргументов по умолчанию может быть несколько:

тип_возвращаемого_значения имя_функции(арг1=значение, арг2=значение)

Аргументами по умолчанию могут быть аргументы, начиная с правого конца списка параметров функции и далее последовательно слева направо без перерывов.Например:

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);                //недопустимо

Рассмотрим пример на работу с параметрами по умолчанию.

#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); // показ линии из пяти звездочек

}



funkcii.txt · Последние изменения: 2010/09/15 17:02 (внешнее изменение)