Адресный тип данных
Память компьютера можно рассматривать как последовательность байтов, номера которых (О, 1, 2,...) называются адресами. Каждая переменная в памяти занимает в зависимости от ее типа некоторое количество последовательных байтов. Например, переменные типа char - 1 байт, а большие массивы - тысячи байтов.
Адресом переменной считается адрес ее первого байта. Не каждый адрес может быть адресом переменной. Например, переменные типа integer могут иметь лишь четные адреса. Адресный тип данных (Pointer) определяет переменные, которые могут содержать значения адресов данных или фрагментов
программы. Все возможные адреса данных какого-либо типа Т образуют носитель типа адресов, который обозначается выражением ^Т.
Пример ^integer обозначает множество адресов целых,
^array [1. .50] of char - множество адресов массивов, образованных из 50 символов,
^record pole1, pole2 : realend - множество адресов записей из двух действительных переменных.
Типом T может быть произвольный тип, кроме типа файла. Тип, обозначенный как ^T, называется адресным, а тип T - базовым для него.
Для обозначения адреса переменной x в языке Pascal определена операция @, которая записывается как @х, Имя nil обозначает адрес 0, принадлежащий всем возможным типам ^Т. Этот адрес не может быть
адресом ни одной переменной, т.е. является "ничейным", фиктивным, который ни на что не указывает.
К однотипным адресам применимы операции сравнения на равенство = и неравенство <>.
Обычно переменная хранит некоторые данные. Помимо таких переменных
|
Такие переменные называются указателями. Это можно изобразить графически
|
|
|
|
Переменная указатель, как и любая переменная должна быть описана в разделе описания переменных. Описание переменной выглядит так:
Имя :^T
Где Имя – имя переменной указателя;
T – тип переменной на которую указывает указатель
В языке Pascal употребляются типизированные указатели - переменные типа ^Т. Они еще называются указателями типа Т. Им можно присваивать адреса переменных только типа Т или nil. Когда адрес переменной присваивается указателю, то говорят, что он устанавливается на переменную.
Пример 3.16. Описание переменных - указателей.
p:^real;
s:^integer;
Переменная типа p – это указатель на переменную типа real, s – на переменную типа integer.
В начале работы программы переменная – указатель ни на что не указывает, т.е. указатель пустой и имеет адрес 0 (NIL).
Указателю можно присвоить значение другого указателя при условии, что типы переменных, на которые они указывают одного типа.
Пример Операция присвоения указателю q2 значения указателя q1
q2:=q1;
q2 и q1 указывают на одну переменную.
К указателям применима операция разыменования со знаком "^".
Если р - указатель типа ^T, то выражение р^ задает переменную типа Т, на которую установлен р.
Если указатель р установлен на переменную х, то выражения х и р^ эквивалентны.
Указатель можно использовать для того, чтобы присвоить значение переменной, на которую он указывает. Например, если s указывает на k, то
в результате выполнения инструкции
s^:=45;
значение переменной k будет равно 45.
Пример 3.18. Применение операции разыменования для задания значений элементам массива. при
Type
mas =array [1..10]of integer;
Var
x : mas;
p : ^mas;
В примере 17.1 элемент массива с индексом i можно задать как х[i], так и как р^[i], т.е.вместо присваивания х[1]:=4 можно написать р^ [1]: =4 или вместо х[2] :=sqr(х[1]) - присваивание р^[2 ]: =sqr(р^ [1]).
Примечание
Дата добавления: 2015-01-13; просмотров: 2813;