Покажчик (тип даних)

Діаграма покажчиків

Покажчик (пойнтер, англ. pointer ) - змінна, діапазон значень якої складається з адрес комірок пам'яті і спеціального значення - нульового адреси. Значення нульового адреси не є реальним адресом і використовується тільки для позначення того, що покажчик в даний момент не може використовуватися для звернення ні до якої комірки пам'яті.

Покажчики застосовуються в двох різних сферах. По-перше, вони дозволяють використовувати деякі вигоди непрямої адресації, широко застосовуваної в програмуванні на мовах ассемблера. По-друге, покажчики пропонують метод динамічного управління пам'яттю: їх можна використовувати для доступу до області з динамічним розміщенням пам'яті, зазвичай званої купою, або динамічною пам'яттю.

Змінні, що розміщуються в купі, називаються динамічними. Часто вони не містять пов'язаних з ними ідентифікаторів, і посилатися на них можна тільки за допомогою покажчиків і посилань.


1. Операції над покажчиками

Мови програмування, в яких передбачений тип покажчиків, містять, як правило, дві основні операції над ними: присвоювання і разименованія. Перша з цих операцій привласнює покажчику деякий адресу. Друга служить для звернення до значення в пам'яті, на яке вказує покажчик. Разименованія може бути явним і неявним, в більшості сучасних мов програмування разименованія відбувається тільки при явному вказівці.

Приклад покажчиків на мові Сі :

 int  n  =  6  ,  / * Оголошення змінної n типу int і присвоювання їй значення 6 * /  *  pn  =  malloc  (  sizeof  (  int  )  )  ;  / * І покажчика pn і виділення під нього пам'яті. * /  *  pn  =  5  ;  / * Разименованія покажчика та присвоювання значення 5. * /  n  =  *  pn  ;  / * Присвоїти n то значення (5), на яке вказує pn. * /  free  (  pn  )  ;  / * Звільнити зайняту пам'ять. * /  pn  =  &  n  ;  / * Дія зворотне разименованія. Присвоює покажчику * /  / * Pn адресу змінної n. Далі покажчик буде посилатися на n. * /  n  =  7  ;  / ** Pn теж стало одно 7 * / 

У разі, якщо покажчик зберігає адресу якого об'єкта, то говорять, що покажчик посилається або вказує на цей об'єкт.

Мови, що передбачають використання покажчиків для управління динамічною пам'яттю, повинні містити оператор явного розміщення змінних у пам'яті. У деяких мовах крім цього оператора передбачений ще й оператор явного видалення змінних з пам'яті. Обидві ці операції часто приймають форму вбудованих підпрограм (функції malloc і free в Сі, оператори new і delete в C + + і т. п.).


2. Нульовий покажчик

Нульовий покажчик - це покажчик, який зберігає спеціальне значення, яке використовується для того, щоб показати, що дана змінна-покажчик не посилається (не вказує) ні на який об'єкт. У різних мовах програмування представлений різними константами.

  • У мовах C # і Java : null
  • У мовах Сі і C + + : 0 або макрос NULL. Крім того, в стандарті C + +11 для позначення нульового покажчика запропоновано нове ключове слово nullptr [1]
  • У мові Паскаль : nil
  • У мові Python : None

Примітки

  1. A name for the null pointer: nullptr - www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf (Англ.) . JTC1.22.32. JTC1/SC22/WG21 - The C + + Standards Committee (2 October 2007). Читальний - www.webcitation.org/65NGO4mjK з першоджерела 11 лютого 2012.


Перегляд цього шаблону Типи даних
Неінтерпретіруемие
Числові
Текстові
Покажчик

Адреса Посилання

Композитні
Інші

Логічний Нижчий тип Колекція Перераховуються тип Виняток First-class function Opaque data type Recursive data type Семафор Потік Вищий тип Type class Unit type Void

Пов'язані теми