Ф-ции. Объявление ф-ции. Вызов ф-ции. Рекурсивный вызов ф-ции.

Любая программа состоит только из ф-ций. Ф-ция – это независимая совокупность объявлений и инструкций, приводящая к решению определенной задачи. Каждая ф-ция имеет имя, для вызова ф-ции. В каждой программе есть только одна ф-ция именем main, с к-рой начинается выполнение программы. При вызове ф-ции ей могут быть переданы параметры посредством переменных. Ф-ция может возвращать значение, это значение- оновной результат ф-ции. С использованием ф-ции в Си связаны: 4)определение ф-ции 5)объявление ф-ции 6)вызов ф-ции

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

Имена параметров в списке формальных параметров могут быть произвольными или отсутствовать. Поскольку такие имена имеют область действия до конца объявления и никакой нагрузки не несут. Если прототип ф-ции не задан, а встретился вызов ф-ции, то компилятор создает неявный прототип. В этом случае ф-ция имеет тип , возвращающий значения int и класс памяти extern. Обычно прототипы помещаются перед main, иногда их выносят в отдельный заголовочный файл, подключаемый директивой #include.

Int rus(unsigned char c)

{ if (c>=’A’)&&(c<=’ё’)

return 1;

else return 0;

}

это сама ф-ция, а е прототип выглядит так :

int rus (unsigned char);

Вызов

Любая программа состоит только из ф-ций. Ф-ция – это независимая совокупность объявлений и инструкций, приводящая к решению определенной задачи. Каждая ф-ция имеет имя, для вызова ф-ции. В каждой программе есть только одна ф-ция именем main, с к-рой начинается выполнение программы. При вызове ф-ции ей могут быть переданы параметры посредством переменных. Ф-ция может возвращать значение, это значение- оновной результат ф-ции.

С использованием ф-ции в Си связаны:

4) определение ф-ции

5) объявление ф-ции

6) вызов ф-ции

Вызов ф-ции имеет формат

выр ([список_выр])

Выражение вычисляется как адрес ф-ции. Список_выражений представляет собой список фактических аргументов, к-рый может быть пустым.

Выполнение вызова ф-ции происходит следующим образом:

1.Вычисляется выражение в списке выражений и производится необходимое преобразование

Ф-ции. Объявление ф-ции. Вызов ф-ции. Рекурсивный вызов ф-ции.

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

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

В общем случае существует два стиля передачи параметров ф-ции :

Call – by – value

(c передачей значений параметров ф-ции)

Используетя когда оьъем передаваемых данных ф-ции не велик и ф-ция не возвращает большой объем данных.

Call - by – reference

(с передачей адресов переменной)

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

Рекурисвные ф-ции.

Любая ф-ция в Си может быть вызвана рекурсивно. При каждом вызове для формальных параметров и переменных с классом памяти auto, register выделяется новая память. Переменные с классом памяти static не требуют новой памяти при каждом рекурсивном вызове. Параметры предыдущих незавершенных вызовов не затираются, но при этом они не доступны. Допустимо любое число рекурсивных ф-ций.

Ф-ции. Объявление ф-ции. Вызов ф-ции. Рекурсивный вызов ф-ции. - student2.ru Пр: n!= 1 n=0

n(n-1)! n>0

long fact(int n )

{ return (n < = 1)? 1 : n*fact(n-1);

}

Наши рекомендации