Масиви як параметри функцій
У тіло функції в якості аргументів можна передавати значення, що зберігаються в масивах. При виклику функції, параметр типу масиву перетворюється компілятором у вказівник на тип масиву. Наприклад, якщо аргумент масив має тип unsigned long, при виклику він буде перетворений в unsigned long*. Таким чином, зміна у функції значення будь-якого елемента масиву, що є аргументом, обов'язково вплине й на оригінал. Масиви відрізняються від інших типів тим, що їх не можна передавати за значенням - усередину тіла функції попадає тільки адреса масиву.
Синтаксис виклику функції при цьому може бути наступним:
FunctionName ( ArrayName ) ;
Тоді прототип функції включає вказівник, як параметр типу переданого масиву й наступних за ним прямокутних дужок. Наприклад:
FunctionName ( char [ ] ) ;
Інший варіант синтаксису передачі масиву у функцію – коли прототип функції містить символ операції узяття адреси після вказівка типу аргументу:
char FunctionName ( char& ) ;
При цьому синтаксис виклику функції приймає наступний вид:
FunctionName (*ArrayName ) ;
Нижче приводиться приклад, що ілюструє обидва варіанта передачі масиву як параметра функції.
#include <iostream.h>
void Out1 ( int [ ], short ) ; // прототип першої функції
void Out2 ( int&, short ) ; // прототип другої функції
void main ()
{
int Array [ ] = {10, 8, 6, 4, 2, 0 } ; // оголошення й ініціалізація масиву
short n ; // розмір масиву
n = sizeof ( Array ) / sizeof ( Array [0] ) ;
Out1 ( Array, n ) ; // виклик першої функції
Out2 ( *Array, n ) ; // виклик другої функції
}
void Out1 ( int arr [ ], short n ) // реалізація першої функції
{
for ( int i = 0 ; i < n ; i++) cout << arr [ i ] << ‘ \t ‘ ;
cout << ' \n ' ;
}
void Out2 ( int& arr, short n ) // реалізація другої функції
{
for ( int i = 0 ; i < n ; i++) cout << *( & ( arr ) + i ) << ‘ \t ‘ ;
cout << ' \n ' ;
}
У розглянутому прикладі оголошується масив Array[], що містить шість цілих значень, і здійснюється його передача у функції Out1 і Out2. Обидві функції виконують те саме дію – виводять уміст масиву аргументу на друк. Функція Out1 одержує в якості параметра вказівник на масив, а функція Out2 – посилання на масив. Крім того, оголошується, ініціалізується й передається в якості параметра змінна n, яка зберігає кількість елементів масиву.
Використання в якості параметра функції багатомірного масиву утруднене, тому на практиці найчастіше здійснюється передача масиву вказівників, що значно спрощує синтаксис.