При передаче в функцию одномерного массива в списке фактических аргументов указываются имя массива и размер массива. В имени массива нет информации о размере массива. Компилятор по имени массива может определить только тип элементов массива и адрес начального элемента массива.
В списке формальных аргументов указываются только типы. Добавлять размер массива бесполезно.
Массивы передаются в функцию по адресу. Это означает, что функция работает с оригиналом массива и может изменять его элементы. Это факт используется для возвращения массивов из функции. С помощью оператора return массив вернуть нельзя.
Примеры прототипов
1. int max(int *A, int Dim);
Можно также писать
int max(int A[], int Dim);
Следующая запись логически не верна, так как размер одномерного массива не входит в тип имени массива.
// int max(int A[100]); ошибка
В списке формальных параметров записи int *A и int A[] равносильны.
2. float scal(float A[], float B[], int Dim);
Пример. Функция находит сумму элементов одномерного массива типа int и программу.
int sum(int *A, int Dim); // прототип функции
|
|
int sum(int *A, int Dim)
{
int S =0;
for (int i = 0; i < Dim; i++)
S += A[i];
return S;
}
void main ()
{
int B[] = {1,2,3,4,5};
int N = sizeof(B)/sizeof(B[0]);
printf (“\nСумма элементов равна %d”, sum(B, N));
}
Пример. Функция находит все четные элементы в одномерном массиве.
int VseChot(int A[], int DimA, int Chot[], int DimChot);
Функция находит четные элементы массива А и помещает их в массив Chot. При этом надо следить, чтобы количество четных элементов не превысило размер DimChot массива Chot. Возвращает количество найденных четных элементов. Если количество четных элементов превысило размер DimChot, то возвращается -1, а массив Chot полностью состоит из четных элементов массива А.
int VseChot(int A[], int DimA, int Chot[], int DimChot)
{
int count = 0;
for(int i = 0; i < DimA; i++)
if (A[i] % 2 == 0) //четное число
if (count < DimChot)
Chot[count++] = A[i];
else
return -1;
}
void main()
{
int A[]={1, 2, 4, 6,7, 5};
int B[4];
int res = VseChot(A, 6, B, 4);
if(res = -1)
{
printf(“\n Найдены не все четные элементы массива:”);
for (int I = 0; I < 4; i++)
printf(“%d ”, B[i]);
}
else
{
printf(“\n Перечень четных элементов массива:”);
for (i = 0; i < 4; i++)
printf(“%d ”, B[i]);
}
}