- •Лекція 5. Передача параметрів в функціях
- •Домашнє завдання Скласти програму, яка повертає значення суми за допомогою покажчика в списку параметрів: а, b– імена змінних типуint;
- •Результати виконання програми
- •Формальний параметр-багатовимірний масив
- •Формальний параметр – одновимірний масив або покажчик
- •Робота з параметрами – рядками має деякі особливості.
- •Результати виконання програми
Результати виконання програми
а =2.5 b =3.7
а =3.7 b =2.5
Розглянемо ще один приклад програми, яка використовує функцію minmax для вибору мінімального і максимального значень із масива а на m значень. Масив а заповнюється випадковими числами за допомогою вбудованих функцій rand i randomize.
Формальними параметрами функції minmax є:
а [m] – масив на m значень типу int
mn i mx –покажчики на скалярні значення типу int.
При виклику в функцію minmax в якості фактичних параметрів передаються адреси розміщення змінних в викликаючій функції:
а –масива а;
&amn – змінної amn і
&amx – змінної amx
Результатом виконання функції minmax є мінімальне (*mn) і максимальне (*mx) значення елементів масиву а, розташованих відповідно за адресами &amn i &amx.
Лістинг – Програма з функцією minmax для вибору мінімального і максимального значень
# include <stdlib.h>
# include <stdio.h>
# include <conio.h>
# define m 5 // m – зовнішня константа
FILE *f; // покажчик для файла результатів
void main ()
{ int a [m ], i, amn, amx;
void minmax (int a[m], int *mn, int *mx ); //оголошення функції
// f=fopen (“10.rez”, “w”); // для виведення у файл
f=fopen (“con”, “w”); // для виведення на екран
clrscr ();
fprintf (f, “Випадкові числа:”); randomize ();
for (i=0; i<m; i++) a[i]= rand ();
fprintf (f, “%d”, a[i]);
minmax (a, &amn, &amx); // виклик функції minmax
fprintf (f, “\n amn=%d amx=%d”, amn , amx);
fclose (f);
printf (“ \n Для завершення натисніть будь-яку клавішу “);
fclose (f);
getch ();
}
// функція вибору мінімального і максимального значень масиву:
void minmax (int a[m], int *mn, int *mx)
{
int i;
*mn = *mx = a[0];
for (i=1; i<m; i++) // формування результату
if (a[i]<*mn *mn= a[i]; // *mn, і
else if a[i]>*mx) *mx= a[i]; // *mx
}
Результати виконання програми
Випадкові числа: 23758 21007 2136 2036 333 86
amn=2036 amx=32386
Параметри-масиви
Масив в якості параметра може бути переданий в функцію тільки за допомогою покажчика (адреси) масиву. В якості формального параметра масиву даних будь-якого типу можна використовувати:
ім’я масиву з фіксованими межами; наприклад:
int a[10]; float b[m] [n];
ім’я масиву з “пустою ” першою межею; наприклад:
int a[ ]; float b[ ] [ ]; double c [ ] [m] [n];
покажчик на початок масиву або підмасиву; наприклад:
int *a; float *b; double *c;
Визначення формального параметра в формі float a[ ] i float *a еквівалентні. При передачі в функцію покажчика – фактичного параметра в ОП формального параметра функції передається адреса нульового елемента масиву – фактичного параметра.
Приклади оголошення функції з параметрами-масивами:
void f1 (float b[m] [n], int m, int n);
void f2 (float a [10], int
k);
void f3 (float a [ ], int k); //ці оголошення еквівалентні
void f4 ( float *a, int k); //для одновимірного масиву
В зв’язку з тим, що при роботі з масивами формальним і фактичним параметром є покажчик – адреса початку масиву, обробка його значень у викликаній функції відбувається над даними, розташованими в ОП, виділеній масиву в викликаючій функції. При цьому масив завжди може бути результатом виконання функції.
Розглянемо різні форми оголошення масивів, допустимі фактичні параметри і допустимі форми завершення до їх елементів.
