Функции, возвращающие два значения

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

Пример. Написать функцию, которая определяет максимальное и минимальное из двух целых чисел.В следующей программе используется достаточно хитрый прием: мы сделаем так, чтобы функция изменяла значение переменной, которая принадлежит основной программе. Один результат(минимальное из двух чисел) функция вернет как обычно, а второй – за счет изменения переменной, которая передана из основной программы.

Обычно при передаче параметра в процедуру или функцию в памяти создается копия переменной, и функция работает с этой копией. Это значит, что все изменения переменной-параметра,сделанные в функции, не отражаются на значении этой переменной в вызывающей программе.Если перед именем параметра в заголовке функции поставить знак & (вспомним, что он также используется для определения адреса переменной), то функция работает прямо с переменной из вызывающей программы, а не с ее копией. Поэтому в нашем примере функция изменит значение переменой max из основной программы и запишет туда максимальное из двух чисел.

Этот приём можно использовать и для процедур: хотя формально они не возвращают ни-

какого значения-результата, можно всё-таки передавать данные в вызывающую программу через изменяемые параметры.

• Если надо, чтобы функция вернула два и более результатов, поступают следующим образом:

o один результат передается как обычно с помощью оператора return

o остальные возвращаемые значения передаются через изменяемые параметры

• Обычные параметры не могут изменяться подпрограммой, потому что она работает с копиями параметров (например, если менять значения a и b в функции MinMax, соответствующиеим переменные N и M в основной программе не изменятся).

• Любая процедура и функция может возвращать значения через изменяемые параметры.

• Изменяемые параметры (или параметры, передаваемые по ссылке) объявляются в заголовке подпрограммы специальным образом: перед их именем ставится знак & — в данном случае он означает ссылку, то есть подпрограмма может менять значение параметра (в данном случае функция меняет значение переменной max в основной программе).

• При вызове таких функций и процедур вместо каждого фактического изменяемого параметра надо подставлять только имя переменной (не число и не арифметическое выражение — вэтих случаях транслятор выдает предупреждение и формирует в памяти временную переменную).

Структура программ


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: