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

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

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

#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; просмотров: 670;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.