Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 6,7,8 базовый Си.docx
Скачиваний:
4
Добавлен:
16.11.2018
Размер:
117.96 Кб
Скачать

7.5 Аппарат формальных и фактических аргументов

Формальные аргументы - это объекты программы, в терминах которых описано тело в описании функции.

Фактические аргументы - это те объекты программы, которые ставятся в соответствие формальным аргументам в вызове функции.

Окончательно синтаксис объявления (описания) функции:

<Тип результата> <имя функции> ([<декларации формальных аргументов>])

{<Декларации>

<Тело функции>

}

Окончательно синтаксис вызова функции:

<Имя функции> ([<список фактических аргументов>])

Пример 4: Определим функцию для нахождения максимального значения

среди двух цiлочисельних значений (a, b) ; имя функции - max_int

INT max_int (int a, int b)

{

return (a> b)? a: b;

}

main ()

{Int x, y, z;

int m1, m2;

scanf ("% d% d% d", & x, & y, & z);

/ * Max среди x, y, z * /

m1 = max_int (x, y);

m2 = max_int (m1, z);

printf ("\ n max (% d,% d,% d) =% d", x, y, z, m2);

}

Выполним классификацию аргументов функций из этого примера:

имя функции | формальные аргументы | фактические аргументы

_____________|___________________________________________________________

main | - | -

_____________|______________________|____________________________________

printf | в библиотеке <stdio.h> | "\ n max (% d,% d,% d) =% d", x, y, z, m2

_____________|______________________|____________________________________

scanf | в библиотеке <stdio.h> | "% d% d% d", & x, & y, & z

_____________|______________________|____________________________________

max_int | a, b | x, y

| | M1, z

_____________|______________________|____________________________________

Аргументы функций также разделяют на:

  1. Входные аргументы;

  2. Выходные аргументы;

  3. Аргументы, которые обновляются.

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

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

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

Выполним классификацию аргументов функциям по примеру 4 по признаку входные аргументы / выходные аргументы / аргументы, которые обновляются.

имя функции | входные аргументы | выходные аргументы | аргументы,

| | | Которые обновляются

_____________|_________________|__________________|_________________

max_int | a, b | - | -

_____________|_________________|__________________|_________________

printf | "\ n max (% d,% d,% d) | - | -

| =% D ", x, y, z, m2 | |

_____________|_________________|__________________|_________________

scanf | "% d% d% d" | & x, & y, & z | -

_____________|_________________|__________________|_________________

7.6 Прототип функции

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

Синтаксис:

<Тип результата> <имя функции> ();

или более "жесткий" вариант:

<Тип результата> <имя функции> (<декларации типов аргументов>);

Поэтому в примере 4 в функции main необходима декларация:

INT max_int (int, int); / * 1 * /

Она сообщает, что в функции main Ожидается вызов функции max_int с двумя цiлочисельнимы аргументами, которая возвращает результат целого типа.

Этот прототип также можно записать иначе:

INT max_int (); / * 2 * /

INT max_int (int a, int b); / * 3 * /

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