Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 116

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 116 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1162019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 116)

Когда Х подставлясгся вместо У, мы должны также указать другую среду ссылок при обработке ссылки иа Х. Также может возникнуть цеодпозпа пюсть, если Х уже является переменной, известной в подпро~ раммс 5иЬ. Нс удивгисльно, что в базисном методе реализации передачи по имени фактические параметры приходится трактовать как простые подпрограммы без параметров, традипиоиио называемые «переходниками» (аиглийский термин для таких подпрограмм, ейцп1г»), Когда в подпрограмме встречается ссылка на формальный 420 Глава 9.

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

Передача по ссылке. Передача по ссылке является, вероятно, наиболее распространенным механизмом передачи параметров. Передача объекга данных с помощью этого механизма означает, что подпрограмме становится доступным указал!ел!ь иа местоположение этого объекта 1то есть его 1-значение). 11ри этак распил овсе!ще обьек!ла даннььтп пиюпли пе изменяется. В начале выполнения подпрограммы 1 значения всех фактических параметров используются для инициализации локальных областей памяти, отведенных под формальные параметры. ! 1средача параметров по ссылке осуществляется в два этапа.

1. В вызывающей подпрограмме вычисляется каждое выражение фактического параметра, чтобы получить указатели на объекты данных, соответствую!цие фактическим параметрам 1то сеть их 1-значения). Список таких указателей сохраняется в общсй области памяти, доступной также и для вызываемой подпрограммы 1часто этой областью служит набор регистров или программный стек).

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

По окончании выполнения вызванной подпрограммы результаты возвращаются в вызывающую подпрограмму такжс через объекты даш!ых, соответствующие фактическим параметрам. Передача по значению. Если параметр ле1!едаел!ся по эначелик! (в языке Лда 95 это называется ло копии), то гзпачеиие фактического параметра передается формальному параметру вызванной подпрограммы. Мсхаиизм реализации похож на модель передачи по ссылке, за исключением того, что: 1) когда вызывается подпрограмма, при передаче параметра по ссылке передается его 1-значение, тогда как при передаче по значению передастся г-значение; 2) при ссылке на параметр в подпрограмме в случае переданного по ссылке параметра для доступа к фактическому объекту данных используется 1-значение, сохраняемое в формальном параметре, тогда как при передаче по значению формальиый параметр содержит собственно зцаченис этого объекта данных, которое и используется для вычислений, Из этого обсуждсния должно быть ясно, что при передаче по ссылке создается псевдоним фактического параметра, тогда как при передаче по значению мы ие имеем такой ссылки.

Если фактический параметр передан по значению, формаль- 9.3. Передача параметров 421 ный параметр не имеет доступа к значению фактического параметра, чтобы измеюсгь его. Любые изменения значения форьчального параметра, произошедшие во время выполнения подпрограммы, теряются, когда программа завершает свое выполнение. Передача по значению-результату. Если параметр передастся по значению- результату, формальный параметр является локальной переменной (объектом данных) того же типа, что и фактический параметр.

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

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

Таким образом, фактический параметр сохраняет свое значение вплоть до завершения подпрограммы, когда ему присваивается новое значение как результат выполнения подпрограммы. Передача параметров по значению-результату появилась в языке А( СО(.-Ю, который был разработан Никлаусом Виртом в 60-е гг. как преемник языка АЕСО1., еше до того, как им был создан язык Рааса!. АЕСО).-Ю был реализован на компьютере 1ВМ 360, на котором реализация передачи параметров по ссылке была относительно нсэффекпшпой, так как отсутствовала возможность получить доступ к г-значению фактического параметра посредством одной команды. На этом компьютере отсутствовала операция косвенного обращения к памяти. Передача параметров по значению-результату делала все параметры локальными переменными, непосредственно адресуемыми с помощью указателя текущей записи активации, что позволяло ускорить выполнение.

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

Формальный параметр может рассматриваться в точности как параметр, переданный по значению, так что он является локальным объектом данных, начальное значение которого представляет собой копию значения фактического параметра. С другой стороны, он может 422 Глава 9, Управление подпрограммами рассматриваться как параметр, переданный по ссылке, так что формальный параметр содержит указатель на объект данных, соответствующий фактическому параметру. Передача параметра и по значению, и по значению-константе гарантирует, что фактический параметр не будет изменен в вызывающей подпрограмме, Таким образом, с точки зрения вызывающей подпрограммы фактический параметр является для нее только вхолцым аргументом.

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

В большинстве языков программирования используется олин или два механизма передачи параметров. В РОКТВАХ применяется передача по ссылке, в то время как в Рааса! используются лва механизма передачи: по ссылке и по значению. Вызов по ссылке обозначается как хаг Х: 1п~едег, а вызов по значению — как 'х; 1пьецег. (Следует отметить, что здесь кроется источник многочисленных ошибок при написании программ на Рааса!. Если программист забудет включить ключевос слово наг, параметр будет передан по значеншо, и любые изменения его значения не будут отражены при возврате в вызывающую подпрограмму. Эта ошибка очеиь коварна, так как бывает чрезвычайно трулно се обнаружить.) В отличие от Рааса! в языке С реализуется только вызов по значению. Олнако использование указателей позволяет создавать параметры, передаваемые по ссылке.

Передача по ссылке аргумента 1 процедурс вуэцЬгоьг1пе осуществляется через выражение ьц которос передает Рзначение аргумента к Вызов процедуры будет выглядеть следующим образом: пуэнЬговь1пе(ь1Е При этом объявление самой процедуры выглялит как вуэвЬгоШ1пе( ~пг *х) — это означает, что х является указателем на целочисленный объект данных. Если забыть включить подходящие операции разыменования (ь и *), то это приведет ко многим ошибкам при программировании на С. 9.3.3. Семантика передачи параметров Обсуждение способов передачи параметров, приведенное в предыдущей главе, вынуждает программ иста составить представление о фактической реализации этого процесса, прежде чем выбрать какой-либо режим передачи параметров.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее