Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
186.88 Кб
Скачать

Параметры функции

Использование параметров является основным способом обмена информацией между вызываемой и вызывающей функциями. Параметры, перечисленные в заголовке описания функции, называются формальными, а записанные в операторе вызова функции — фактическими.

При вызове функции в первую очередь вычисляются выражения, стоящие на месте фактических параметров; затем в стеке выделяется память под формальные параметры функции в соответствии с их типом, и каждому из них присваивается значение соответствующего фактического параметра. При этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение. Существует два способа передачи параметров в функцию:

  • по значению

  • по адресу.

Синтаксис при вызове и передаче параметров по значению:

имя (факт_параметр1, факт_параметр2 …);

Синтаксис при определении и объявлении:

тип имя (тип форм_параметр1, тип форм_параметр2 …);

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

При передаче параметров по адресу используется 2 синтаксиса:

а) с помощью ссылки

при вызове:

имя (факт_параметр1, факт_параметр2 …);

при определении и объявлении:

тип имя (тип &форм_параметр1, тип &форм_параметр2…);

б) с помощью указателя

при вызове:

имя (&факт_параметр1, &факт_параметр2…);

при определении и объявлении:

тип имя (тип *форм_параметр1, тип *форм_параметр2…);

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

При передаче по адресу в качестве фактических параметров нельзя использовать выражения, а только имена переменных.

Способы передачи параметров в функцию могут комбинироваться.

#include <iostream.h>

#include <conio.h>

#define out cout << i <<" "<< j <<" "<< k <<"\n";

Void f(int , int* , int& );

Int main()

{

int i = 1, j = 2, k= 3;

cout <<"i j k\n";

out

f(i, &j, k);

out

getche();

return 0;}

Void f(int I, int* j, int& k)

{

i++; (*j)++; k++;

}

Первый параметр (i) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования. Третий параметр (k) передается по адресу с помощью ссылки.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]