Параметры-массивы в функциях
Массивы, так же как и простые переменные, можно передавать в функции в качестве параметров. Так как имя массива – это адрес, то передача массива происходит всегда по адресу.
Рассмотрим, например, функцию, вычисляющую среднее значение элементов массива. Желательно сделать ее так, чтобы в нее можно было передавать массив любого размера. В языке С++ функции не могут самостоятельно определять размер массива, поэтому он (размер) должен быть обязательно одним из параметров.
#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("\n sr x=%d sr y=%d\n", Sum(x,5),Sum(y,3));
}
Обратите внимание, что в заголовке функции Sum размер N массива указан отдельным параметром. Нельзя объявлять массив-параметр как A[N], а только как A[] или *A.
Если в функцию передаётся двумерный массив, то описание соответствующего параметра функции должно содержать количество столбцов; количество строк - несущественно, поскольку фактически передаётся указатель. Например, так: int Х[ ][5], или Х[5][5].
Рассмотрим пример функции, перемножающей матрицы А и В; результат - матрица С. По правилам математики перемножать можно матрицы, размеры которых (mxn) и (nxk) соответственно. Результирующая матрица будет иметь размеры (mxk).
const nmax = 50;
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];
}
}
Функция product в заголовке содержит список из шести формальных параметров. Первые три – для приема адресов трех матриц: двух исходных и результирующей. Последующие три параметра примут копии значений размеров матриц.
В приведённом примере есть недостаток - здесь заранее фиксируется максимальная размерность матриц. Но использоваться может только часть памяти.
Если мы хотим передать в подпрограмму отдельный элемент
массива, то в качестве соответствующего ему формального параметра указывается простая переменная того же типа.
Дата добавления: 2015-02-10; просмотров: 725;