ПОНЯТНО О Visual Basic NET (том 3)



         

Механизм действия ссылочных типов - часть 2


типы, у которых механизм предоставления памяти совсем другой. Разберемся в нем.

2. Массивы. Рассмотрим второй фрагмент. Вот что находится в памяти после выполнения оператора A(2) = 5:

Адреса

Значения

Адреса

Значения

A

000101

002040

002040

0

002041

0

002042

5

B

000102

002300

002300

0

002301

0

002302

0

На схеме я для наглядности изобразил ячейки в два столбца.

Пояснения: При выполнении операторов

Dim A(2) As Integer

Dim B(2) As Integer

каждой из переменных A и B отводится в памяти одна

ячейка и еще дополнительная область памяти для хранения  элементов массива (по три ячейки, которые заполняются нулями). В этой одной ячейке находится адрес первой ячейки из области памяти или, по-другому, ссылка на эту область памяти. Ссылку еще называют указателем. Вот такой механизм. Таким образом, значением переменной A является совсем не набор из трех чисел, а всего лишь адрес, номер ячейки. Запомните это.

Когда выполняется оператор A(2) = 5,  компьютер, зная, что массив является ссылочным типом, рассматривает значение 002040 в ячейке для переменной A именно, как адрес, а не число типа Integer, и поэтому не пытается записать в эту ячейку число 5, а  отправляется по указанному адресу, где находит три ячейки. В какую из них записать число 5, ему указывает индекс 2.

Рассмотрим, как выполняется оператор B = A.  Вам могло показаться по аналогии с первым фрагментом, что при этом все три числа из области памяти для A копируются в область памяти для B.  Но нет, здесь по своему строгому, но привычному вам закону выполняется оператор присваивания. Закон этот говорит, что значение переменной A должно быть записано в ячейку для значения переменной B. Поскольку значением переменной A является адрес 002040, то он и копируется в ячейку для значения переменной B. Вот что получается:

Адреса

Значения

Адреса

Значения

A

000101

002040

002040

0

002041

0

002042

5

B

000102

002040

002300

0

002301

0

002302

0

<


Содержание  Назад  Вперед