Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Передача параметров по значению - еще один способ повысить надежность программирования. Рассмотрим пример.

Вот процедура Квадр, вычисляющая периметр и площадь квадрата по его стороне:

Dim A As Integer 'сторона

Dim P As Integer 'периметр

Dim S As Integer 'площадь

 

Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer)

Периметр = 4 * Сторона

Площадь = Сторона ^ 2

End Sub

 

Private Sub Command1_Click()

A = 10

Квадр A, P, S

Debug.Print " Сторона="; A; " Периметр="; P; " Площадь="; S

End Sub

Результат:

Сторона= 10 Периметр= 40 Площадь= 100

Здесь щелчком по кнопке вы приказываете компьютеру вычислить периметр и площадь квадрата со стороной 10. Компьютер, выполняя тело процедуры Квадр и присваивая значения переменным Периметр и Площадь, тем самым присваивает значения переменным P и S, то есть изменяет содержимое ячеек памяти, отведенных под эти переменные. Говорят, что в этом случае между вызывающей и вызываемой процедурами осуществляется передача параметров по ссылке. Чтобы подчеркнуть, что вы используете именно этот способ передачи параметров, вы можете записать заголовок процедуры так:

Private Sub Квадр (Сторона As Integer, ByRef Периметр As Integer, ByRef Площадь As Integer)

хоть это и излишне.

При этом способе вызываемая процедура получает полный контроль над переменными A, P и S вызывающей процедуры и может присваивать им все, что хочет. Это удобно, но небезопасно. Ведь в этом случае переменные становятся беззащитными против ошибок в вызываемой процедуре. Так, программист может случайно, для каких-то других нужд, включить в процедуру какой-нибудь оператор, меняющий значение параметра Сторона, например, Сторона=1. Предположим, в этом случае процедура примет такой вид:

Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer)

Периметр = 4 * Сторона

Площадь = Сторона ^ 2

Сторона = 1

End Sub

Тогда результаты будут напечатаны неверно:

Сторона= 1 Периметр= 40 Площадь= 100

Чтобы обезопасить себя от такой ситуации, вы можете явно приказать Бэйсику, чтобы он не смел трогать такую-то переменную, отдающую свое значение параметру. Для этого достаточно заголовок процедуры написать так:

Private Sub Квадр (ByVal Сторона As Integer, Периметр As Integer, Площадь As Integer)

Теперь, что бы ни произошло с параметром Сторона, значение переменной A меняться не будет. Убедитесь, что теперь снова все в порядке. Такой способ передачи параметров называется передачей параметров по значению.

Не переборщите с надежностью. Так, глупо было бы писать

Private Sub Квадр (ByVal Сторона As Integer, ByVal Периметр As Integer, ByVal Площадь As Integer)

так как результат в этом случае был бы такой:

Сторона= 10 Периметр= 0 Площадь= 0

 

Задание 130: На двух метеостанциях (A и B) в течение года измерялась температура. Соответственно созданы два массива чисел длиной 365. Затем оказалось, что на обеих станциях термометры были испорчены: на станции A термометр все время показывал температуру на 2 градуса выше настоящей, а на станции B - на 3 градуса ниже. Написать процедуру с двумя параметрами, которая исправляет один исходный массив и с ее помощью исправить оба массива. Один параметр - величина поправки, другой - массив температур.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.