**Указатель** - это переменная, значением которой является адрес некоторой ячейки памяти:
```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++;
	}
	```