Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры прога 2.docx
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
83.31 Кб
Скачать

Определение ф-ции

Определение ф-ции задает имя, кол-во и тип формальных параметров и тело ф-ции. Оно может определять тип возвращаемого значения и класс памяти ф-ции.

[спецификатор_класса_памяти][спецификатор_типа]

имя([спецификатор_формальных_параметров])

тело ф-ции

Класс памяти ф-ции может быть static или extern. По умолчанию считается extern.Спецификатор типа задает тип возвращаемого ф-цией значения и может быть любого основного типа, типа структуры или объединения. Если спецификатор типа не задан, то считается, что ф-ция возвращает значение типа int. Имя ф-ции может быть задано со *, это означает, что ф-ция возвращает указатель. ф-ция не может возвращать массив или ф-цию. Тип возвращаемого значения в определении ф-ции должен соответствовать типу в объявлении ф-ции. Ф-ция возвращает значение, если ее выполнение заканчивается return[выражение]. Если оператор return не задан или не содержит выражение, то ф-ция не возвращает никакого значения, в этом случае спецификатор типа указывается с помощью слова void. Если ф-ция объявлена со спецификатором типа, а значение не возвращается, то результат не определен. Список формальных параметров- это последовательность объявлений формальных параметров, разделенных запятыми.

[register]спец_типа [имя] Список формальных параметров может быть пустым. В списке формальных параметров указывается слово void. Порядок, типы и число формальных параметров в определении ф-ции должны совпадать с порядками, типами и числом параметров в объявлении и всех вызовах ф-ции. Язык Си позволяет задавать переменное число аргументов. Список формальных параметров заканчивается (,…) Однако предполагается, что ф-ция имеет по крайней мере столько аргументов, сколько задано перед последней запятой. Ф-ции может быть передано большее число аргументов, указанных до(,…), над такими аргументами не производится контроль типов. Тело ф-ции – это составной оператор, соединяющий объявления и инструкции. Запрещается внутри тела ф-ции помещать другие ф-ции. Все переменные, объявленые в теле ф-ции, имеют класс памяти auto. Под

19.2. Функции. Определение ф-ций.

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

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

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

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

  1. определение ф-ции

  2. объявление ф-ции

  3. вызов ф-ции

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

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

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

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

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

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

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

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

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

1.callbyvalue

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

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

2.call - byreference

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

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

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

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

П р: n!= 1 n=0

n(n-1)! n>0

long fact(int n )

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

}