- •Функции
- •1. Определение, описание и вызовы функций
- •Тело функции
- •Формальные параметры:
- •Глобальные переменные:
- •Return (выражение);
- •Void r ( int a, int b, int c)
- •Void main ( )
- •Void rr ( int* a, int* b, int*c)
- •Void main ( )
- •Void rrr ( int & a , int &b , int & c )
- •Void main ( )
- •2. Классификация формальных параметров
- •1) Формальные параметры функции являются:
- •Формальный параметр – скаляр, указатель на скаляр, ссылка на скаляр
- •Void mult ( int a , int b , int *s )
- •Void minmax (int a[n], int & min, int & max)
- •Int main ()
- •2) Формальные параметры - массивы, указатели на массивы
- •Void f1(float a [ ][n][k], int m, float & s)
- •Int main ()
- •Формальный параметр - указатель:
- •Void f (int*a, int*b, int*c, int n, int m)
- •Int main () {
- •Int main ( )
- •Void mas (double** ptr, int m, int n)
- •Int main ( ){
- •Void mas (int (*lp) [3][4], int n)
- •Int main ()
- •3.Результат функции, возвращаемый с помощью оператора return.
- •Return (выражение);
- •Int * poisk (int*c, int m, int n)
- •Int main ()
- •Int main ( )
- •Int main ( )
- •Int main ()
- •Int& rmax (int d [ ], int n)
- •Int main ()
Формальный параметр - указатель:
В качестве формальных параметров определяются:
указатель на первый элемент массива любой мерности и второй параметр – общее количество элементов в массиве:
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;
}
Формальные параметры - указатели на двумерный массив, размеры которого заранее не известны.
Параметрами являются указатель на массив указателей на строки матрицы: 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 ();
}
