Параметры-массивы в функциях

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

Массивы, так же как и простые переменные, можно передавать в функции в качестве параметров. Так как имя массива – это адрес, то передача массива происходит всегда по адресу.

Рассмотрим, например, функцию, вычисляющую среднее значение элементов массива. Желательно сделать ее так, чтобы в нее можно было передавать массивы любого размера и она всегда правильно вычисляла результат. В языке С++ функции не могут самостоятельно определять размер массива, поэтому он должен быть обязательно одним из параметров.

#include "stdafx.h"

int Sum ( int A[], int N )

{

int i, sum;

sum = 0;

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

sum += A[i];

return sum/N;

}

void main()

{

int x[5]={1,2,3,4,5},y[3]={11,22,33};

printf("\nsr x=%d sr y=%d\n",

Sum(x,5),Sum(y,3));

}

 

Обратите внимание, что в заголовке функции размер массива указан отдельно. Нельзя объявлять массив-параметр как A[N], а только как A[] или *A.

Если в функцию передаётся двумерный массив, то описание соответствующего аргумента функции должно содержать количество столбцов; количество строк - несущественно, поскольку фактически передаётся указатель. Например: int Х[ ][5], или Х[5][5].

Рассмотрим пример функции, перемножающей матрицы А и В; результат - матрица С.

const nmax = 10;

void product(int А[][nmax], int В[][nmax],int С[][nmax], int m, int n, int k)

{
/* m - число строк в матрице А;
n - число строк в матрице В (должно быть равно числу столбцов в матрице А);
k - число столбцов в матрице В.
*/
for (int i=0; i< m; i++)
for (int j=0; j< k; j++){
С[i][j]=0;
for (int l=0; l< n; l++)

С[i][j] + = А[i][l]*В[l][j];
}
}

В приведённом примере есть недостаток - здесь заранее фиксируется максимальная размерность матриц. Но использоваться может только часть памяти.