> For the complete documentation index, see [llms.txt](https://op-al.gitbook.io/s-30-voprosy-i-dop.-voprosy/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://op-al.gitbook.io/s-30-voprosy-i-dop.-voprosy/14.-adresnaya-arifmetika-slozhenie-i-vychitanie-ukazatelya-s-chislom-sravnenie-ukazatelei.md).

# 14. Адресная арифметика (сложение и вычитание указателя с числом, сравнение указателей,

вычитание указателей). Связь между указателями и массивами. Примеры с массивами и матрицами.

**Адресная арифметика** - это способ вычисления адреса какого-либо объекта при помощи арифметических операций над указателями, а также использование указателей в операциях сравнения.

Если p и q указывают на элементы одного массива, то к ним можно применять операторы отношения ==, !=, <, >= и т. д.

p < q истинно, если p указывает на более ранний элемент массива, чем q.

#### Сложение и вычитание указателей с целым числом <a href="#slozhenie-i-vychitanie-ukazatelei-s-celym-chislom" id="slozhenie-i-vychitanie-ukazatelei-s-celym-chislom"></a>

Конструкция p + n означает адрес объекта, занимающего n-е место после объекта, на который указывает p.

Это справедливо к любому типу объекта, на который указывает p; n автоматически домножается на коэффициент, соответствующий размеру объекта.

Результатом вычитания указателей р – q является целое значение, равное расстоянию между адресами, содержащимися в указателях

### Связь между указателями и массивами <a href="#svyaz-mezhdu-ukazatelyami-i-massivami" id="svyaz-mezhdu-ukazatelyami-i-massivami"></a>

В Си существует связь между указателями и массивами (матрицами). Доступ к любому элементу массива (матрицы), может быть выполнен с помощью указателя.

Название массива - указатель на его первый элемент.

&#x20;`arr == arr[0] == *arr;`

&#x20;`arr[1] == *(arr + 1)`

Если мы разыменуем название матрицы, то получим указатель на первую строку матрицы. Дважды разыменуем – получим указатель на первый элемент первой строки матрицы.

`mat[0][] == *mat`

`mat == mat[0][0] == **mat`

`mat[3][4] == *(*(mat + 3) + 4)`
