Cтраница 1
Переменная-указатель получает значение при создании динамической переменной, осуществляемом процедурой ALLOCATE. Кроме того, указатели можно присваивать друг другу и сравнивать на равенство и неравенство. Арифметические операции над указателями запрещены. Со всеми указательными типами совместимо специальное значение NIL. Его можно присваивать указателю, чтобы отметить, что он никуда не указывает. [1]
В третьем примере объявлена переменная-указатель, поименованная pointer. Она указывает на массив из 10 элементов. [2]
В приведенном примере значок показывает, что значение пять присваивается переменной, на которую указывает переменная-указатель. [3]
В приведенном примере значок Л показывает, что значение пять присваивается переменной, на которую указывает переменная-указатель. [4]
![]() |
Блочная структура и схема совмещения полей основной памяти для параллельных блоков. [5] |
Описание данных, размещенных в соответствии с базированным способом, включает описатель BASED, за которым в скобках записывается переменная-указатель. [6]
Например, если р является указателем на тип real, то в результате выполнения процедуры new ( p); будет выделена память для переменной типа real ( создана переменная типа real), и переменная-указатель р будет содержать адрес памяти выделенной для этой переменной. [7]
Для того чтобы понять, что такое указатель, полезно представлять, как он реализован. Переменная-указатель фактически содержит адрес объекта, на который указывает. Концепция адреса хорошо известна людям, программирующим на языках низкого уровня или ассемблерах. [8]
На распечатке 7.8, поскольку список пуст, когда запускается программа, указатель HeadOfList инициализируется со значением NIL. В начале главного управляющего цикла переменная-указатель Item инициализируется так, что она находится в начале списка при поиске нужного места для вставки нового числа. [9]
![]() |
Связанный список. [10] |
Мы все еще не сказали, что же представляет собой тип указателя. Его значением является адрес в памяти. Этот адрес в памяти задает положение информационного объекта, на который указывает переменная-указатель. Когда создается информационный объект, адрес нового информационного объекта присваивается переменной-указателю. Как мы увидим в § 7.2.2, переменные, на которые указывают типы указателей, являются динамическими, т.е. они могут создаваться ( или уничтожаться) во время выполнения программы. [11]
![]() |
Попытка изменения указателя-константы, ссылающегося на не-константные данные.| Попытка изменить константный указатель на константные данные. [12] |
Минимальные права доступа предоставляет указатель-константа на константные данные. Такой указатель всегда указывает на то же самое место в памяти, а расположенные по этому адресу данные не могут модифицироваться. Этому варианту соответствует передача массива функции, которая только просматривает массив при помощи индекса и не изменяет его элементы. В программе на рис. 7.14 объявляется переменная-указатель ptr типа const int const. Объявление читается справа налево и звучит так: ptr - указатель-константа на целую константу. На рисунке показаны сообщения об ошибках, полученных в результате попытки изменить данные, на которые указывает ptr, и изменить присвоенный указателю адрес. [13]
Доступ к памяти ЭВМ определяется путем ссылки на внутренние числа, называемые адресами. И переменные-указатели, и переменные-адреса содержат числа, соответствующие значениям, требующимся аппаратуре ЭВМ для поиска информации. Обычно программы на Модуле-2 никогда не ссылаются на конкретные машинные адреса, поскольку компилятор автоматически распределяет память для каждой переменной и эти адреса обычно недоступны прикладной программе. Даже при использовании динамических переменных и указателей программисту не требуется знать конкретное содержание переменной-указателя. Интерес представляет только объект, на который ссылается указатель. Поэтому Модула-2 задает только один указатель-константу NIL для обозначения того, что переменная-указатель не указывает ни на какой объект. Тем не менее некоторые ЭВМ используют некоторую форму ввода-вывода, при которой устройствам ввода-вывода присваиваются машинные адреса, как если бы устройство было частью памяти ЭВМ. Операционные системы и программы ввода-вывода должны иметь возможность обращаться к конкретным ячейкам памяти для работы с такими устройствами. В результате в Модуле-2 имеется возможность доступа к конкретным машинным адресам. В некотором смысле это средство эквивалентно константе-указателю. [14]