Вызов функции

Обращение к функции имеет вид

имя_функции (список аргументов), где

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

Возможны два способа вызова функции:

1. Вызов функции – операнд.

В этом случае значение, возвращаемое функцией, используется в выражении, где функция участвует как операнд; например:

int fun1(int k) /* заголовок функции */

m = fun1(n) * p; /* вызов функции-операнда */

2. Вызов функции – оператор.

Если вместо типа функции стоит слово void или возвращаемое значение функции игнорируется, а используются только фактические параметры, то вызов функции задается как отдельный оператор, например:

void fun2 (int mas[]) /* заголовок функции */

fun2 (ar[10]); /* вызов функции-оператора */

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

При обработке вызова функции возможны два способа передачи данных в функцию и из функции: по значению и по адресу.

Передача данных по значению

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

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

Программа:

int Sum (int a, int b) /* описание функции Sum */

{ a++; b++; return (a+b); }

void main () /* главная функция */

{ int m, k=5, l=4; /* фактические параметры */

m = Sum(k, l); /* передача аргументов по значению */

printf (“m=%d k=%d l=%d “, m, k, l ”);

}

Результат программы: m=11 k=5 l=4,

то есть фактические параметры (k, l) остались без изменения после вызова функции.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: