Глава 1. Динамические переменные. Динамические структуры Распределение памяти ОЗУ Условно можно представить: Системн ая область Код Область данных: программы раздел глобальных переменных и констант Свободная память (динамические переменные ) СТЕК: локальные переменные Структура адреса: два 16-ти разрядных слова (сегмент + смещение) Пример: 0010 1011 0101 1000 2 = 2B58 16 Системная область Пример: 0010 1011 0101 1000 2 = 2 B 5 2B58 16 8 8 4 2 1 1011 Минимальное смещение: 0 0 0 0 16 Максимальное смещение: 1 1 1 1 16 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Указатели Указатель – это переменная, которая в качестве своего значения содержит адрес байта памяти. Или, указатель – это ссылка на какой-то участок динамической памяти. Указатель можно считать обычной статической переменной. Динамическая переменная – переменная, на которую указывает указатель (находится в динамической области памяти). Причины использования указателей: Работа с большими объектами данных; Работа с данными неизвестного размера; Использование временных буферов памяти; Использование связных списков. Описание указателей. Как правило, в С++ указатель связывается с некоторым типом данных. Такие указатели будем называть типизированными. Переменныеуказатели объявляются с помощью символа "*", который добавляется после названия обычного типа данных. Например, оператор описания (его можно прочитать как "указатель на целочисленную переменную"): int* number_ptr; //ссылается на целый тип данных Операции над указателями Передача адреса int x; int *p; { p:=&x; … } Пример: Разыменование указателей. char c1 = 'a'; char* p = &c1 // в p хранится адрес c1 char c2 = *p; // c2 = 'a‘ Переменная, на которую указывает p - это c1, а значение, которое хранится в c1, это 'a', поэтому присваиваемое c2 значение *p есть 'a'. Операции над указателями