Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 5 Функции.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
219.14 Кб
Скачать

5.5 Передача массивов функциям

В C++ по умолчанию массивы всегда передаются в функцию по ссылке. Это делается с целью экономии памяти, т.к. в случае копирования массива большой размерности память компьютера использовалась бы нерационально. Информацию о реальном количестве элементов массива всегда следует передавать через отдельный параметр. Для одномерного массива-параметра функции можно указать его максимальную размерность, которая должна быть предварительно объявлена как константа (фиксированный массив):

const int Nmax = 100;

int Func( int Mas[Nmax], int N ); // объявление функции

или просто не указывать размерность (открытый массив):

const int Nmax = 100;

int Func( int Mas[ ], int N ); // объявление функции

Второй вариант предпочтительнее, т.к. позволяет передавать в функцию одномерный массив любой размерности.

Приведём пример функции Summa(), которая вычисляет и возвращает сумму элементов массива. Блоки ввода и вывода одномерного массива также оформим в виде отдельных функций Input() и Output(). Реальная размерность массива N определяется внутри функции ввода Input() и должна быть возвращена в main(). Поэтому она передаётся через параметр-ссылку, чтобы функция могла изменить значение N. Что же касается функции Output(), то в этом случае размерность N передаётся по копии, поскольку в процессе вывода массива на экран его размерность не изменяется. Обе функции являются нетипизированными, т.к. сам массив и его размерность передаются и возвращаются обратно через параметры-ссылки.

const int Nmax = 100;

void Input( int Mas[ ], int &N ); // ввод массива

void Output( int Mas[ ], int N ); // вывод массива

int Summa( int Mas[ ], int N ); // сумма элементов массива

//---------------------------------------------------------------------------------

void main()

{

int Mas[Nmax];

int N;

Input( Mas, N ); // или Input( &Mas[0], N ); передаётся адрес 1-го элемента

Output( Mas, N );

printf( "\n\n Сумма элементов массива равна %5d", Summa( Mas, N ) );

getch();

}

//---------------------------------------------------------------------------------

void Input(int Mas[ ], int &N) // функция ввода массива

{

printf( "\n N = ");

scanf( "%d", &N );

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

{

printf( " Mas[%d] = ", i + 1 );

scanf( "%d", &Mas[i] );

}

}

//---------------------------------------------------------------------------------

void Output(int Mas[ ], int N) // функция вывода массива

{

printf("\n\n Massiv \n");

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

printf( "%5d", Mas[i] );

}

//---------------------------------------------------------------------------------

int Summa(int Mas[ ], int N); // сумма элементов массива

{

int S = 0;

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

S += Mas[i];

return S;

}

При передаче многомерных массивов все размерности, если они не известны на этапе компиляции, должны передаваться в качестве параметров-ссылок или параметров-копий в зависимости от того, будет ли функция их изменять или нет.