Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Каждая область памяти имеет свой адрес. Грубо говоря, все байты пронумерованы, и эти номера и есть адреса. Значения переменных хранятся в памяти и соответственно у каждой переменной есть свой адрес. Указателем называется переменная, в которую записан адрес некоторой области памяти. Например, в указателе может быть записан адрес, по которому хранится значение какой-нибудь другой переменной.
Типы переменных для хранения указателей называются ссылочными типами. Для описания ссылочного типа используется символ «^» и имя базового типа. Базовым типом может быть любой тип, кроме файлового, включая описанные вами самими типы.
Примеры описания ссылочных типов:
type PInteger = ^integer; PReal = ^real; {Обычный тип-массив, не ссылочный} TMyArray = array [1..10] of real; {А это уже соответствующий ссылочный тип} PMyArray = ^TMyArray;
Значения с такими типами будут хранить адреса, по которым в памяти могут располагаться, соответственно, целое число, вещественное число и массив вещественных чисел.
Для того чтобы присвоить указателю некоторое значение можно воспользоваться операцией взятия адреса, которая обозначается символом @. Пусть, например, описаны переменные:
var X, Y: integer; {Обычные переменные, не указатели} P: ^integer; {Указатель на целое число} P2: PInteger; {Тоже указатель на целое число, тип которого был описан выше}
Тогда допустима следующая операция:
P:=@X;
Значением указателя P станет адрес, по которому хранится значение переменной X.
Зная адрес, можно узнать, какое значение по этому адресу записано или записать значение в память с этим адресом. Для этого используется так называемая операция разименования указателя (dereference, если по-английски). Она обозначается символом «^», который ставится после имени переменной-указателя. Например:
{В область памяти с адресом P записывается число 5} P^:=5; {В переменную X записывается значение, хранящее по адресу P} X:=P^;
С разименованными указателями (после которых поставили символ «^») можно работать как с обычными переменными.
Пусть выполняются операторы:
X:=3; P:=@X; P^:=5;
В результате в переменную X будет записано число 5. Мы это сделали косвенным способом, изменив содержимое ячеек памяти, где хранилось значение переменной X.
Ссылочные типы допустимо образовывать от любого типа, в том числе от другого ссылочного типа. Поэтому допустимо определение указателя на указатель:
var z: ^PInteger;
Возможные значения такой переменной – адреса в памяти, где хранятся адреса, по которым записаны целые числа.
Среди возможных значений указателей выделяется одно особенное значение – nil. Указатель, имеющий значение nil, «никуда не указывает». Указатель nil, считается константой, которую можно присвоить указателю любого типа.
Следующий раздел:
Предыдущий раздел: