Инструменты пользователя

Инструменты сайта


examination:ccc:question2

Вопрос №2. Динамические типы данных. Указатели

Обычно говорят о трех видах памяти:

  • автоматической
  • статической
  • динамической («куча»)
  1. Статическая память используется для хранения глобальных переменных
  2. Автоматическая память используется для хранения локальных переменный. Эта память выделяется при вызове процедур и функций, использующих собственные внутренние данные. Автоматическая память используется до конца работы процедуры или функции, а затем очищается.
  3. Для работы с данными произвольного размера служит динамическая память. Для работы с этой памятью используется специальный тип данных, называемый указателями.

Указатели

Указатель - это переменная, хранящая некоторый адрес памяти.

Указатели могут использоваться:

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

В 32-х разрядной системе для хранения одного адреса необходимо 4 байта. В 64-х разрядной - 8 байт.

Указатели всегда возвращают адрес начала массива.

Действия, производимые с указателями:

1. Создание (при создании указателя на переменную нужно уточнить, какой объем данных необходим для хранения этой переменной. Необходимо указать тип переменной, на которую указатель ссылается. Такой указатель называется указателем с типом.

В некоторых языках программирования возможно использование безтиповых указателей, однако использовать такие указатели следует с очень большой осторожностью, т.к. данные в памяти расположены последовательно друг за другом и при использовании безтипового указателя с типом, превышающим/меньшим чем размерность типа требуемой переменной, может возникнуть ошибка в вычислениях).


2. Присваивание (указателю можно присвоить конкретное значение либо другой указатель (типы присваиваемых указателей должны совпадать)).


3. Разыменование (под разыменованием указателя понимается получение значения, кранящегося по адресу, на который ссылается указатель).


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

examination/ccc/question2.txt · Последние изменения: 2014/01/15 08:13 (внешнее изменение)