Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Способы обмена данными между функциями

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

1. Передача по значению.

2. Передача данных по адресу.

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

1. Вычисляются выражения в списке фактических аргументов в соответствии с приоритетами операций, в результате получаются числовые значения фактических аргументов. Затем, если известен прототип функции, то тип полученного фактического аргумента сравнивается с типом соответствующего формального аргумента. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных аргументов, если только функция не имеет переменного числа аргументов.

2. Происходит присваивание значений фактических аргументов соответствующим формальным аргументам.

3. Управление передается на первый оператор функции и выполняется тело функции.

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

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

int (*fun)(int x, int *y);

Объявлена переменная fun как указатель (имя указателя fun) на функцию с двумя аргументами: типа int (аргумент х) и указателем на int (имя указателя) y. Сама функция должна возвращать значение типа int. Круглые скобки, содержащие имя указателя fun и признак указателя *, обязательны, иначе запись

int *fun (int x,int *y); будет интерпретироваться как объявление функции fun, возвращающей указатель на int.

Вызов функции возможен только после инициализации значения указателя fun и имеет вид : (*fun)(i,&j);

В этом выражении для получения адреса функции, на которую ссылается указатель fun используется операция разадресации *.

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

highlightSyntax('cpp_20395','cpp');

 

<== предыдущая лекция | следующая лекция ==>
Float average_value(int, int); // Прототип функции | Экологические принципы рационального использования природных ресурсов и охраны окружающей среды
Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 571; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.