В 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 передаётся по копии, поскольку в процессе вывода массива на экран его размерность не изменяется. Обе функции являются нетипизированными, т.к. сам массив и его размерность передаются и возвращаются обратно через параметры-ссылки.
|
|
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;}При передаче многомерных массивов все размерности, если они не известны на этапе компиляции, должны передаваться в качестве параметров-ссылок или параметров-копий в зависимости от того, будет ли функция их изменять или нет.