Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЛАВА 6 Массивы.doc
Скачиваний:
42
Добавлен:
29.02.2016
Размер:
145.92 Кб
Скачать

Массивы в качестве параметров функций

В языке С++ допустима передача любых массивов функциям. Если в функцию передаётся одномерный массив, то необходимо либо использовать массивы с заранее известным числом элементов, либо передавать размер массива с помощью дополнительного параметра.

Пример 1. Параметр функции – массив заданного типа и размера.

int data[5], i;

for(i = 0; i < 5; i++)

data[i] = i;

vivod(data); // передаём функции массив data

void vivod(int mas[5]){ // функция выводит массив на экран

for(int i = 0; i < 5; i++)

cout<<mas[i]<<' ';

cout<<endl;

}

В приведённом примере заранее известно число элементов – 5, поэтому в вызове функции всего один аргумент – имя массива data.

Пример 2. Параметр функции – одномерный массив с произвольным

числом элементов.

vivod(data, n); // передаём массив data и размер n в функцию

...

void vivod( int mas[], int size){

for(int i = 0; i < size; i++)

cout<<mas[i]<<' ';

cout<<endl;

}

В функции vivod() размер входного массива не указывается напрямую. Пустые квадратные скобки обозначают, что параметр mas[] представлен в виде безразмерного массива. Размер массива передаётся через целочисленный параметр size. Данная функция является универсальной, поскольку может быть использована для вывода на экран целочисленного массива любого размера.

Если массив является параметром функции, то при вызове функции ей передаётся только адрес массива, а не полная его копия. Вследствие такой передачи (по ссылке) вызываемая функция может изменять значения элементов массива непосредственно в тех ячейках памяти, где он располагается. Если нужно запретить изменять значения элементов массива, следует объявить его как массив констант.

Кроме одномерных массивов функциям можно передавать многомерные массивы, в частности – двумерные. При передаче двумерных массивов в качестве параметров функции следует задавать минимум информации, необходимой компилятору для получения передаваемых адресов памяти. Например, если в функцию надо передать матрицу matr[n][m], где n – количество строк, а m – количество столбцов, то функцию можно объявить как

void fun(int matr[5][4]); // где n = 5; m = 4;

или

void fun(int matr[][4]);

причём второй вариант более предпочтителен. Но объявление вида

void fun(int matr[5][]);

скомпилировано не будет, как и объявление

void fun(int matr[][]);

13