Главная страница
Содержание
 
 

Тип данных «Указатель».

Указатель – это переменная, множество значений которой состоит из адресов ячеек памяти и специального значения – нулевого адреса. Нулевой адрес обозначает, что указатель никуда не указывает, т.е. он пустой.

В языках высокого уровня указательный тип применяется для организации работы с динамической памятью.

Динамическая память – это память, выделяемая в куче (англ. heap) непосредственно в процессе работы приложения. В отличии от статической, которая выделяется при инициализации приложения, динамическая память может быть выделена и перераспределена в любой момент функционирования приложения с помощью специальных команд.

Существуют два типа указателей:

  1. общий (нетипизированный) указатель;.
  2. типизированный указатель.

Примечание: Нетипизированные указатели в Pascal не используются для изменения памяти, так как работа с ними не является безопасной, поэтому далее, встретив слово «указатель» необходимо понимать, что речь идет именно о типизированных указателях

Для работы с указателями введены дополнительные операции:

  1. @<имя> - операция взятия адреса – возвращает адрес, с которым ассоциировано <имя> (пример в листинге 2);
  2. <имя указателя>^ - операция разыменования, т.е. обращение к переменной, на которую указывает типизированный указатель.

Примеры использования операций описаны в листинге 2.



Листинг 2. Объявление и использование указателей
program listing_2;
uses crt; (* подключаем библиотеку *)
var p1,p2: ^integer; { так можно объявить типизированный указатель, 	
                       в данном случае два указателя на целое}
	i: integer;
begin
 clrscr; (* очистка экрана *)
 i :=1;   { инициализируем переменную некоторым значением}
 p1 := @i;	{ записываем в указатель адрес переменной, т.е. 
              теперь указатель ссылается на ячейку памяти, 
			  в которой расположено значение переменной i }
 i :=2;	{ меняем значение переменной i }
 p2^ := 4;  { инициализируем указатель с помощью операции 
             разыменования: 1. В памяти выделяется ячейка памяти 
			 в которую помещается 4; 
 2. В p2 записывается адрес этой ячейки}
 writeln(p1^,p2^) { Будет выведено: 24}
end.


С использованием указателей и динамической памяти реализуются структура данных линейный список.