у которых механизм предоставления памяти
типы, у которых механизм предоставления памяти совсем другой. Разберемся в нем.
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 |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий