
Класифікація параметрів і результатів функцій
В зв’язку з особливою важливістю вміння використовувати функції мови Сі розглянемо більш детально різні типи їх параметрів: скаляри і покажчики скалярів, масиви, структури і покажчики структур, масиви покажчиків, покажчики на масиви покажчиків. На малюнку представлена схема класифікації параметрів і результатів виконання функцій, які розглянемо далі.
за
допомогою return
за
допомогою параметра
одновимірний багатовимірний покажчиків Скалярне
значення, повертаєме: Масив: Структуру:
Розглянемо деякі типи задач для використання параметрів і результатів виконання функцій у відповідності з класифікацією на рисунку.
Формальний параметр – ім’я скаляра використовується для передачі функції одного значення. Фактичним параметром при цьому може бути вираз типу сумісного з типом формального параметра.
Покажчики скалярів використовують для повернення результатів – скалярних значень визначеного типу. Формальним параметром при цьому є покажчик змінної, а фактичним – адреса значення змінної: скалярна, елемента масиву або структури.
За допомогою параметра – масива можна передати в функцію масив на обробку і отримати результат у вигляді масива даних любого типу. Формальним і фактичним параметром може бути ім’я масиву або покажчик на масив.
Формальний параметр – ім’я структури використовують для передачі (копіювання) в функцію значень структури. Фактичним при цьому може бути тільки ім’я структури. Формальний параметр – покажчик на структуру – використовується для передачі у функцію адреси (покажчика) структури або масиву структур. Фактичним параметром при цьому може бути адреса (покажчик) структури викликаючої функції.
Повернення результату – покажчика на скалярне значення – можна виконати за допомогою оператора return або за допомогою параметра. Повернення результату – значення покажчика на одне конкретне значення використовується, наприклад, в задачах пошуку адреси заданого значення в масиві даних будь-якого типу і при роботі зі зв’язаними структурами – стеком, чергою або списком. Для повернення значення покажчика за допомогою параметра формальним параметром повинен бути покажчик на покажчик, а фактичним – адреса покажчика на дані визначеного типу. Формальний параметр – ідентифікатор скалярної змінної. В прикладі використовується дві функції: star i slava. Функція star виводить з нового рядка m зірочок (*) за допомогою функції putchar. А функція slava – k раз виводить один і той же рядок name за допомогою функції printf. Функції star i slava не повертають значень ні за допомогою return, ні за допомогою списка параметрів.
Формальні параметри функції slava:
--name — ім’я покажчика на символьні дані;
--k—ім’я змінної—кількість повторень виведення рядка;
В списку фактичних параметрів оператора виклику функції slava рядкова константа визначає покажчик його початку; значення 3 – ціла константа—кількість повторень виведення цього рядка; k i m—формальні параметри функцій star i slava—є параметрами – значеннями. Вони дозволяють використовувати в якості фактичних параметрів вирази, в окремому випадку яких є константи 30 і 3.
Приклад програми з функціями виведення символьних даних.
# include <stdio.h>
# include <conio.h> // для clrscr
void main ( )
{ void slava ( char *name, int k); // оголошення функції slava
void star ( int m); // оголошення функції star
clrscr ( )
star (30); // виклик функції star для виведення 30 символів ’*’
slava (“ Мова Сі зручна і ефективна…”,3); // виклик slava
star (30);
printf(“\n Для завершення програми натисніть будь яку клавішу \n”);
getch( );
}
//---- Функція slava:----
{void slava (char *name, int k) // Заголовок функції
for (i=0; i<k; i++) printf (“\n %s”, name);
}
//---- Функція star----
void star (int m)
{ int i;
putchar(‘\n’);
for (i=0; i<m; i++) putchar(‘*’);
}