Что делает оператор присваивания с памятью
Я только что рассказывал о работе оператора присваивания, используя такие выражения, как "компьютер знает", "компьютер помнит". Но нам необходимо более строгое понимание работы этого оператора, понимание "ближе к железу".
Рассмотрим пример программы:
Dim a As Integer
Dim b As Integer
Dim у As Integer
Private Sub Command1_Click()
a = 10: b = 6: y=a+b+1
Debug.Print у + 200
End Sub
В программе встречаются три переменные, поэтому все они объявлены. Компьютер отведет для них в памяти три двухбайтовые ячейки. Вот как будет работать оператор присваивания:
Выполняя оператор присваивания (например, у=а+Ь+1), компьютер сначала смотрит на его правую часть (а+Ь+1). Если в ней встречаются переменные (в нашем случае это а и b), то компьютер перед вычислением ищет их значения в отведенных под них ячейках памяти (и находит там 10 и 6, так как их туда записали операторы а=10 и Ь = 6), подставляет эти значения в правую часть и вычисляет ее. Затем вычисленное значение (17) компьютер записывает в ячейку памяти, отведенную под переменную, поставленную в левой части (у).
Таким образом, когда мы говорим "Компьютер запомнил, что а равно 2", мы подразумеваем "Компьютер записал в ячейку памяти, предназначенную для а, число 2".
А теперь рассмотрим, как будут заполняться информацией ячейки а, Ь, у в процессе выполнения нашей программы. В самом начале выполнения программы в них находятся нули. Первым выполняется оператор а=10. Согласно только что приведенному определению оператора присваивания в ячейку а будет записано число 10. Затем выполняется оператор Ь= бив ячейке Ь появляется шестерка. Затем выполняется оператор у= а+Ь+1. Компьютер смотрит, что находится в ячейках а и Ь, видит там 10 и 6, подставляет их в выражение а+Ь+1, получает 17 и записывает в ячейку у. Наконец выполняется оператор Debug.Print у + 200. Компьютер заглядывает в ячейку у, видит там 17, вычисляет 17+200 и выводит 217 в окно Immediate.
Схематически этот процесс можно изобразить так:
Теперь мы можем также уточнить работу оператора Debug.Print:
Если в операторе Debug.Print встречаются выражения с переменными величинами, то Visual Basic находит в памяти значения этих величин, подставляет их в выражения, вычисляет выражения и результат выводит на экран. В память же ничего не записывается.
Задание 7: Ответьте устно, что произойдет, если поменять местами операторы Ь=6 и у=а+Ь+1?
Режим прерывания. Пошаговый режим выполнения программы
Компьютер выполняет программу со страшной скоростью. Не успели мы нажать кнопку — а результаты уже получены. Пока все идет хорошо, это нас восхищает. Когда же результаты не те, что надо (а ошибок в программе мы не видим), это начинает раздражать. Хотелось бы, чтобы компьютер работал помедленнее и хорошо бы как-нибудь подсмотреть во время работы значения переменных в памяти, это помогло бы найти ошибку. Режим прерывания для этого и предназначен.
Запустите предыдущий проект на выполнение не кнопкой Start, как вы привыкли, а клавишей F8 на клавиатуре. Это горячая клавиша для Debug -> Step Into. Проект начнет выполняться как обычно. Нажмите, как водится, кнопку Command1. И тут вы почувствуете разницу. Вместо того, чтобы полностью выполниться и показать результат, проект остановится на самой первой строке процедуры, а именно, на Private Sub Command1_Click(), в знак чего эта строка окажется подсвечена желтым цветом. Итак, только-только начав выполняться, наш проект замерз до тех пор, пока следующее нажатие F8 его не разморозит. "Мгновение остановилось".
Интересно, чему во время остановки равны значения переменных в памяти компьютера? Для того, чтобы узнать это, достаточно поместить мышиный курсор на обозначение переменной в тексте процедуры в окне кода. Как и положено, "на табло пока одни нули".
Еще раз F8. Ничего не происходит, только полоса подсветки прыгает на следующую строку. В ней находится первый исполняемый оператор вашей процедуры — а = 10.
F8. Visual Basic выполняет а = 10, а следующий оператор подсвечивается. Проверьте, чему сейчас равны а, Ь, у в памяти.
F8. Visual Basic выполняет Ь = 6, а следующий оператор подсвечивается. Проверьте, чему сейчас равны а, Ь, у в памяти.