Указатели_Списки

advertisement
Глава 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'.
Операции над указателями
Download