- •Функции
- •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 ()
Void rrr ( int & a , int &b , int & c )
{ a += 100; b+= 100; c+= 100;
cout << a <<b <<c ;
}
Void main ( )
{ int a1=1 , b1 =2 , c1=3;
cout << a1 << b1 <<c1 ;
RRR( a1, b1 , c1 );
cout << a1 <<b1 << c1 ;
}
Результат:
1 2 3 // переменные до вызова функции
101 102 103 // изменения параметров в функции
101 102 103 // функция изменила фактические параметры
На рисунке 3 показано, как функция непосредственно обрабатывает внешние по отношению к ней переменные. При этом в функции не выделяется память под формальные параметры, формальный параметр – это абстракция, просто имя, которое при передаче фактического параметра связывается с внешним по отношению к функции участком памяти.
стек
101 102 103 - знач. переменных после вызова функции
1 2 3 - знач. переменных до вызова функции
a1 b1
c1 -
переменные адреса
a b c - ссылки
Рисунок 3 – Схема обработки данных функцией при передаче параметров по ссылке
Фактическим параметром может быть также имя другой ссылки, инициированной в вызывающей функции.
2. Классификация формальных параметров
Формальный параметр скаляр, указатель на скаляр, ссылка на скаляр.
В качестве скаляра будут рассматриваться переменные основных типов, элементы массивов или структур.
Если
1) Формальные параметры функции являются:
а) скаляры,
б) указатели на скаляры,
в) ссылки на скаляры,
то
фактическими параметрами должны быть:
а) значения скаляров,
б) адреса скаляров,
в) имена скаляров (имена участков памяти);
2) формальные параметры: массивы или указатели на массивы,
фактические параметры: имена массивов или имена указателей на массивы;
3) формальный параметр:
а) определение структуры,
б) указатель на структуру или массив структур
в) ссылка на структуру;
фактический параметр:
а) имя структуры (копирование структуры,
б) адрес (указатель) структуры или указатель на массив структур,
в) имя структуры (работа со структурой без копирования, т.е имя участка памяти, выделенного под структуру);
формальный параметр – указатель на функцию
фактический параметр – адрес(имя) функции.
Формальный параметр – скаляр, указатель на скаляр, ссылка на скаляр
Примеры были рассмотрены выше при рассмотрении передачи параметров по значению, по адресу и по ссылке.
Еще примеры:
1.
#include<iostream>
Void mult ( int a , int b , int *s )
{* s = a * b; }
int main ()
{ int c=3, d=7, s;
mult (c, d, & s); // mult ( 3, 7 , & s)
cout<< s ;
system("pause");
return 0;
}
2.
#include <iostream>
#include <iomanip>
#include <ctime>
#define n 10
using namespace std;
