**Указатель** - это переменная, значением которой является адрес некоторой ячейки памяти: ```cpp тип* имя; ``` Пример: ```cpp int* p; ``` ## Операции с указателями 1. Обращение к ячейке по адресу (разыменование) ![Разыменование указателя](../Pictures/05_01.%20Разыменование%20указателя.png) 2. Сложение указателя с целым числом: ```cpp p = p + 1 ``` В этом случае значения указателя должно измениться и стать адресом другой ячейки памяти. При этом значение указателя меняется в соответствии с размером ячейки. Если `p` - указатель на `int`, то `+1` изменит значение адреса на 4, а если на `double` - то на 8. 3. Создание для указателя динамической переменной соответствующего типа: ```cpp указатель = new тип; ``` Все переменные, которые мы использовали до сих пор (в т. ч. массивы) являлись статическими. Они создавались в области статической памяти и после создания внутри блока их нельзя было уничтожить. В отличие от статических, оператор `new` создает переменные в динамической памяти (куче), и любую динамическую переменную можно как создать в произвольном месте программы, так и уничтожить. ```cpp int a = 5, b = 6, c = 7; int* p = new int; *p = a * b * c ``` ![Создание динамической переменной](../Pictures/05_02.%20Создание%20динамической%20переменной.png) 4. Уничтожение динамической переменной: ```cpp delete p; ``` 5. Обращение к элементам массива через указатель ```cpp const int n = 5; int a[n] = {1, 2, 3, 4, 5}; int* p = a; for (int i = 1; i <= n; i++) { cout << *p << endl; p++; } ```