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

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

Private Type типПерсонаж | Рамка (Frame) | Флажок (CheckBox) | Переключатель(OptionButton) | Slider, ProgressBar | Список (ListBox) и поле со списком (ComboBox) | Знакомство с другими элементами управления | Глава 16. Строки, файлы, обработка ошибок | Функция Shell | Глава 17. Функции. Параметры процедур и функций |


Читайте также:
  1. A) Informations – Передача информация
  2. III. Показания к назначению ГКС
  3. IV. Передача персональных данных субъектов ПД
  4. IV. Противопоказания к назначению ГКС
  5. Section 1. Передача имен собственных и географических названий.
  6. Виды диагностических параметров
  7. ВИДЫ ДИАГНОСТИЧЕСКИХ ПАРАМЕТРОВ (ДП)

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

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

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 градуса ниже. Написать процедуру с двумя параметрами, которая исправляет один исходный массив и с ее помощью исправить оба массива. Один параметр - величина поправки, другой - массив температур.


Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Локальные переменные| Индукция. Рекурсия

mybiblioteka.su - 2015-2024 год. (0.007 сек.)