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

В 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;}

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: