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

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

В списке формальных аргументов указываются только типы. Добавлять размер массива бесполезно.

Массивы передаются в функцию по адресу. Это означает, что функция работает с оригиналом массива и может изменять его элементы. Это факт используется для возвращения массивов из функции. С помощью оператора 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]);

}

}


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



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