Указатель (тип данных) | это... Что такое Указатель (тип данных)? (original) (raw)
У этого термина существуют и другие значения, см. Указатель.
Диаграмма указателей
Указатель (пойнтер, англ. pointer) — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса. Значение нулевого адреса не является реальным адресом и используется только для обозначения того, что указатель в данный момент не может использоваться для обращения ни к какой ячейке памяти.
Указатели применяются в двух различных сферах. Во-первых, они позволяют использовать некоторые выгоды косвенной адресации, широко применяемой в программировании на языках ассемблера. Во-вторых, указатели предлагают метод динамического управления памятью: их можно использовать для доступа к области с динамическим размещением памяти, обычно называемой кучей, или динамической памятью.
Переменные, размещаемые в куче, называются динамическими. Часто они не содержат связанных с ними идентификаторов, и ссылаться на них можно только с помощью указателей и ссылок.
Операции над указателями
Языки программирования, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель. Разыменование может быть явным и неявным, в большинстве современных языков программирования разыменование происходит только при явном указании.
Пример указателей на языке Си:
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++ и т. п.).
Нулевой указатель
Нулевой указатель − это указатель, хранящий специальное значение, используемое для того, чтобы показать, что данная переменная-указатель не ссылается (не указывает) ни на какой объект. В различных языках программирования представлен различными константами.
- В языках C# и Java: null
- В языках Си и C++: 0 или макрос NULL. Кроме того, в стандарте C++11 для обозначения нулевого указателя предложено новое ключевое слово nullptr[1]
- В языке Паскаль: nil
- В языке Python: None
См. также
Примечания
- ↑ A name for the null pointer: nullptr (англ.). JTC1.22.32. JTC1/SC22/WG21 — The C++ Standards Committee (2 October 2007). Архивировано из первоисточника 11 февраля 2012. Проверено 4 октября 2010.
Типы данных | |
---|---|
Неинтерпретируемые | Бит • Ниббл • Байт • Трит • Трайт • Слово |
Числовые | Целый • С фиксированной запятой • С плавающей запятой • Рациональный • Комплексный • Длинный • Интервальный |
Текстовые | Символьный • Строковый |
Указатель | Адрес • Ссылка |
Композитные | Алгебраический тип данных (обобщённый) • Массив • Ассоциативный массив • Класс • Список • Кортеж • Объект • Option type • Product • Структура • Множество • Объединение (tagged) |
Другие | Логический • Низший тип • Коллекция • Перечисляемый тип • Исключение • First-class function • Opaque data type • Recursive data type • Семафор • Поток • Высший тип • Type class • Unit type • Void |
Связанные темы | Абстрактный тип данных • Структура данных • Интерфейс • Kind (type theory) • Примитивный тип • Subtyping • Шаблоны C++ • Конструктор типа • Parametric polymorphism |