- •Тема 6. Структуры
- •6.1 Понятие структуры в языке Си
- •6.2 Объявление типа структуры
- •6.3 Декларация переменных структурного типа
- •6.4 Доступ к элементам структурной переменной
- •6.5 Массивы структур
- •6.6 Оператор sizeof
- •6.7 Декларация typedef
- •7.2 Определение функции
- •7.3 Функции, вызывающие, I функции, вызываемые
- •7.4 Связи по данным между функциями
- •7.4.1 Вызов функции
- •7.4.2 Инструкция return (возврат)
- •7.5 Аппарат формальных и фактических аргументов
- •Входные аргументы;
- •Выходные аргументы;
- •Аргументы, которые обновляются.
- •7.6 Прототип функции
- •Тема 8. Передача аргументов функций
- •8.1 Способы передачи аргументов
- •8.1.1 Передача аргументов по значению
- •8.1.2 Передача аргументов по имени
- •8.1.3 Передача аргументов по ссылке
- •8.2 Особенности передачи аргументов в языке Си
- •8.3 Особые случаи передачи аргументов
- •8.3.1 Передача аргументом одномерного массива
- •Пример 6: сумма елеметiв массива (вариант 1).
- •Пример 7: сумма елеметiв массива (вариант 2).
- •8.3.2 Передача аргументом многомерного массива
- •8.3.3 Передача аргументом структуры
- •8.4 Аргументы командной строки
7.2 Определение функции
Прежде чем использовать функцию, ее нужно определить
Синтаксис:
<Тип результата> <имя функции> ([<декларация аргументов>])
{
<Декларации> / * тело
<Инструкции> функции * /
};
Могут быть опущены отдельные компоненты этого определения:
-
если опущено <тип результата>, то по умолчанию тип результата функции - int ;
-
если опущена <декларация аргументов>, то список аргументов пуст (), в этом случае функция без аргументов ;
-
если опущенi <декларации> в <теле функции>, то в такой функции нет локальных переменных ;
-
если опущенi <инструкции> в <теле функции>, то не имеет исчисления результата для этой функции - это "пустая функция" (заглушка)
Пример 1: минимальная функция.
dummy () {};
Оператор () - высший приоритет, лiвоасоцiативний.
Такие функции-заглушки используют для создания больших программных комплексов, состоящих из множества функций. По мере разработки функций такие заглушки заменяют на реальные функции.
7.3 Функции, вызывающие, I функции, вызываемые
Рассмотрим программу с такой структурой.
Главная функция (main) вызывает сначала вспомогательное функцию a (которая в свою очередь вызывает вспомогательное функцию b ), а затем - вспомогательная функция b .
Функция, которая отдает управление (управление), называется функцией, вызывающий.
Функция, которая получает управление (управление), называется функцией, вызываемой.
функция, которая вызывает | функция, вызываемая
_________________________ |___________________________
имя | по отношению к | имя | по отношению к
______|___________________|_______|____________________
main | a, b | a | main
a | b | b | a, main
______|___________________|_______|____________________
Во входном файле Си-программы функции могут быть расположены в произвольном порядке:
Пример 2: все варианты программ эквивалентные.
Все функции в языке Си независимые друг от друга. Не существует пидпорядкованостi (вкладеностi) функций.
7.4 Связи по данным между функциями
Связи по данным между функциями в языке Си организуется тремя способами:
-
через аргументы;
-
через возвращаемые;
-
через внешние переменные.
7.4.1 Вызов функции
<Имя функции> ([<список аргументов>])
Значение, возвращаемое функцией, может быть в функции, вызывающей, проигнорировано.
Пример 3:
/ * вызов printf: * /
printf ("как инструкция");
/ * Printf возвращает результат: * /
if (res = printf ("как выражение"))
dummy (); / * успех * /
else
exit (-1); / * выход в MS-DOS * /
7.4.2 Инструкция return (возврат)
Возвращает результат из вызываемой функции, в с функцию, которая вызывает.
Синтаксис:
return <выражение>; / * если выражение простой * /
return (<выражение>); / * если выражение сложное * /
Семантика:
-
приведение к типу результата, который объявлен в функции, вызывающей;
-
функция, которая вызывает, может игнорировать значение, которое возвращает функция, вызываемая;
-
<Выражение> после фразы return может быть отсутствующим, тогда эта функция не возвращает;
-
return может быть отсутствующим. В этом случае возврат управления в функцию, которая вызывает, происходит при встрече последней закрывающей скобки '}';
-
в функции возможны несколько инструкций return , если они возвращают значение одного типа;
-
если же различные инструкции return возвращают функцию, вызывающий, данные разных типов, то программист отвечает за качество работы такой функции;
-
если функция не возвращает результат, то в ее объявлении задается тип void ( пусто ) как тип результата i в ее теле не нужна инструкция возврата return .