- •Лекція 5. Передача параметрів в функціях
- •Домашнє завдання Скласти програму, яка повертає значення суми за допомогою покажчика в списку параметрів: а, b– імена змінних типуint;
- •Результати виконання програми
- •Формальний параметр-багатовимірний масив
- •Формальний параметр – одновимірний масив або покажчик
- •Робота з параметрами – рядками має деякі особливості.
- •Результати виконання програми
Лекція 5. Передача параметрів в функціях
Формальний параметр – покажчик скалярної змінної.
Якщо в списку формальних параметрів стоїть покажчик на скалярну змінну, то це означає передачу фактичного параметра за посиланням (аналог є в Паскалі). Фактичним параметром в цьому випадку може бути тільки покажчик – адреса розміщення фактичного параметра – змінної допустимого типа. Для значення адреси – фактичного параметра в стеку виділяється ОП, в яку копіюється значення адреси – фактичного параметра.
Таким чином, функції, які використовують параметри – покажчики на скалярні значення, при обробці значень, що адресують змінні – фактичні параметри – використовують ОП, яка виділяється фактичним параметром викликаємої функції, тому будь-яка зміна цих змінних в функції є також їх зміною в програмі, яка викликала.
Можливість доступу із функції не до копій, а до оригіналів скалярних значень викликаючої функції і забезпечують формальні параметри – покажчики. Після виклику функції формальний параметр – покажчик на змінну – містить значення фактичного параметра – адресу змінної і викликана функція може використати цю адресу для зміни значення змінної, викликаючої функції. Таким чином, якщо треба повернути скалярне значення результата, використовують не і’мя змінної, а покажчик на цю змінну.
Якщо функція повертає одне скалярне значення будь-якого типу, то доцільно використовувати повернення значення за допомогою оператора return, а якщо кількість скалярних значень, що повертаються більше одного, то треба використовувати для повернення результатів список параметрів з покажчиками змінних, за допомогою яких і повертаються значення результатів.
Приклад оголошення функції з формальним параметром покажчиком:
void fun (int i, int *j);
В якості формальних параметрів функції fun використовуються:
і –ім’я скалярної змінної;
j – ім’я покажчика на дані типу int.
Приклад виклику функції fun:
fun (a, &b); де а,b – імена змінних.
Передаються в функцію fun в якості фактичних параметрів і копіюються в ОП, виділену в стеку для її формальних параметрів:
для і – значення результату виразу – фактичного параметра (в окремому випадку це може бути копія значення змінної а);
для j – адреса змінної – фактичного параметра: &b.
Значення, розташоване за адресою, вмісту змінної j, є поверненим результатом виконання функції. Виклик функції fun може бути у вигляді:
fun (k, &m); fun (k+3, &m);
При виклику цієї функції в якості фактичного параметра може бути також ім’я покажчика на змінну того ж типу. Наприклад, якщо в функції, що викликає оголосити:
int k, m,*p; …. p=&m;
то виклик функції може бути у вигляді:
fun (k, p);
Результат виконання функції – значення змінної, розташованої за адресою р, може бути використаний у викликаючій функції у вигляді *р – вмісту, на який вказує р.
Домашнє завдання Скласти програму, яка повертає значення суми за допомогою покажчика в списку параметрів: а, b– імена змінних типуint;
s – ім‘я покажчика на змінну типу int– результат виконання функції.
Приведемо приклад програми з функцією swap для того , щоб змінити місцями значення даох змінних. Формальними параметрами є покажчики р1 і р2 на ці змінні, а фактичними – адреси змінних: &a, і &b.Ця задача не може бути вирішена без параметрів – покажчиків.
# include <conio.h>
# include <stdio.h>
FILE *f; // покажчик для файла результату
void main ()
{ void swap (float *p1, float *p2); // оголошення функції
float a=2.5; b=3.7;
// f= fopen (“0.9. rez”, “w”); // для виведення у файл
f=fopen (“con”, “w”); // для виведення на екран
clrscr ();
fprintf (f, “\na=%.1f_b=%.1f”, a, b); // виведення початкових даних
swap (&a, &b); // фактичні параметри – адреси: &a i &b
fprintf (f, “\na= %.1f b=%.1f”, a,b); // виведення результату
fclose (f);
printf (“\n Для завершення натисніть будь- яку клавішу \n”)
getch ();
} // закінчення функції main
//---- функція змінює місцями значення фактичних пар:
void swap (float *p1, float *p2) // p1 i p2 – покажчики
{ float r=*p1; *p1 = *p2; *p2 = r;}