Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
функции_new.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
101.67 Кб
Скачать
  1. Формальный параметр - указатель:

  1. В качестве формальных параметров определяются:

указатель на первый элемент массива любой мерности и второй параметр – общее количество элементов в массиве:

type*p, int n.

Фактическими параметрами в этом случае будут – указатель типа type*, значение которого - адрес первого элемента массива и второй параметр - значение общего количества элементов в массиве.

При этом надо помнить, что имя массива любой мерности – это константный указатель, значением которого является адрес первого элемента массива, однако только для одномерного массива имя – есть указатель на элемент массива, для двумерного массива имя массива – это указатель на строку массива и так далее.

Чтобы получить указатель на элемент массива для двумерного массива, надо разыменовать имя массива, для трехмерного массива – два раза разыменовать имя массива и так далее. Или решать проблему явным приведением типов указателей.

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

Все три массива представим с помощью указателей на первый элемент массива. Используем еще два параметра для указания размеров исходных массивов. Размер результирующего массива является суммой количества элементов двух массивов.

#include<iostream>

using namespace std;

Void f (int*a, int*b, int*c, int n, int m)

{

int i, j, p;

for (i=0; i < n+m; i++) //формирование неупорядоченного массива

if (i < n) c[i] = a[i];

else c[i] = b[i-n];

//упорядочивание массива методом пузырькового всплытия

for (i = 0; i < n+m-1; i++)

for (j = n+m - 1; j > i; j --)

if (c[j] < c[j-1])

{p= c[j]; c[j] = c[j-1]; c[j-1] = p;}

}

int i, a [ ] = {7,9,5,4,0,2,89,33,73,11},

b [ ] = {23,87,55,45,4,3,0,6,7,3},

n= sizeof (a) / sizeof (a [0]),

m= sizeof (b) / sizeof (b [0]);

// а) создаваемый массив – статический:

Int main () {

int c [sizeof (a) / sizeof (a [0]) + sizeof (b) / sizeof (b [0])];

// - выделена память на статический массив

f (a, b, c, n, m);

for (i = 0; i < n + m; i++)

cout << c[i] << " ";

system ("pause");

return 0;

}

// б) создается динамический массив:

Int main ( )

{

int*x = new int [n+m]; //- выделена память на динамический массив

f (a, b, x, n, m);

for (i =0; i < n + m; i++)

cout << x[i] << " ";

delete [ ] x;

system ("pause");

return 0;

}

  1. Формальные параметры - указатели на двумерный массив, размеры которого заранее не известны.

Параметрами являются указатель на массив указателей на строки матрицы: type**p и два значения целого типа: int m - количество этих строк и int n - количество элементов в каждой строке.

В этом случае динамически выделяется память и на массив указателей на строки матрицы и на числа в этих строках, таким образом, проводится динамическое выделение памяти на двумерный массив.

В качестве примера определим функцию заполняющую массив – параметр случайными числами:

#include <iostream>

#include <iomanip>

#include <ctime>

using namespace std;

Void mas (double** ptr, int m, int n)

{srand (time (0)); //инициализация генератора случайных чисел

for (int i =0; i < m; i++)

for (int j = 0; j < n; j++)

ptr[i][j] = rand ();

}