|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Параметры функцииИспользование параметров является основным способом обмена информацией между вызываемой и вызывающей функциями. Параметры, перечисленные в заголовке описания функции, называются формальными, а записанные в операторе вызова функции — фактическими. При вызове функции в первую очередь вычисляются выражения, стоящие на месте фактических параметров; затем в стеке выделяется память под формальные параметры функции в соответствии с их типом, и каждому из них присваивается значение соответствующего фактического параметра. При этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение. Существует два способа передачи параметров в функцию: - по значению - по адресу. - Синтаксис при вызове и передаче параметров по значению:
имя (факт_параметр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) передается по адресу с помощью ссылки. Использование ссылок вместо указателей улучшает читаемость программы, избавляя от необходимости применять операции получения адреса и разыменования. Использование ссылок вместо передачи по значению более эффективно, поскольку не требует копирования параметров, что имеет значение при передаче структур данных большого объема. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |