Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vstup.docx
Скачиваний:
47
Добавлен:
28.09.2019
Размер:
6.42 Mб
Скачать

Призначення функції. Опис, визначення, виклик функції. Передача даних за значенням та за покажчиком.

Каждая программа представляет собой либо одну главную функцию, обозначаемую main(), либо функцию main()и любое количество других дополнительных функций, предназначенных для выполнения определенных действий (вычислений, обмена данными с внешними устройствами и т.д.). Функция main() обеспечивает точку входа в откомпилированную программу.

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

Любая функция, кроме главной функции main(), должна быть определена или, по крайней мере, описана до её использования (вызова) в конкретном модуле.

Определение функции имеет следующий синтаксис

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

{ тело функции}

Тип функции – это тип возвращаемого функцией значения, т.е. базовый (например, int, float, т.д.) или производный тип вычисленного в функции значения (например, тип структуры или объединения). Если функция ничего не возвращает, например, обеспечивает вывод на экран или изменяет значения массива и т.п., то тип функции обозначается void.

Имя функции – это любой уникальный допустимый идентификатор, например, myfunc.

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

тип имя_параметра или тип имя_параметра=умалчиваемое_значение

Первая строка функции называется заголовком функции.

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

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

Если функция не возвращает никакого значения, т.е. имеет тип void, то выражение в операторе return может отсутствовать, а сам оператор return может отсутствовать.

Пример. Функция вычисляет сумма трех переменных типа int. Функция имеет три формальных параметра и один оператор return.

int sum(int a,int b,int c)

{int S=a+b+c;

return S;}

Обращение к функции

Обращение к функции (вызов функции) – это выражение с операцией круглые скобки(). Для вызова функции указывается имя функции и список фактических параметров:

Имя_функции (список фактических параметров);

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

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

Понятие прототипа функции

До первого обращения к функции в файле (модуле) должно быть помещено либо описание, либо определение функции.

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

Примеры прототипов:

int sum(int a,int b,int c);

int max(int, int y);

float mult(double *, char);

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

В языке С(C++) передача параметров (кроме указателей и массивов) в функции при их вызове осуществляется по значению. Это означает, что для передаваемых (фактических) параметров в функции создаются копии этих параметров. Действия, производимые с этими параметрами (копиями) в функции не влияют на переменные вне функции, т.е. на фактические переменные.. Для формальных параметров выделяется своя область памяти, в которую заносятся значения фактических параметров. При выходе из функции выделенная память высвобождается.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]