Адресная арифметика


Под адресной арифметикой (или арифметикой над указателями) понимаются действия над указателями, связанные с использованием адресов памяти. Рассмотрим основные операции, которые можно применять к указателям, а какие – нельзя.

Операция адреса

Так как указатель – это переменная, то для получения адреса памяти, где расположен указатель, можно использовать операцию адреса (&):

int * p, x = 5; p = &x;

cout<<&x<<&p<<endl;

Операция присваивания

Указателю можно присвоить адрес переменной

p = &x, где p – указатель, x – имя переменной.

Указатели можно присваивать один другому, если оба указателя одного типа:

int x = 5; int * p = &x;

int * q = p;

cout<<*p<<' '<<*q<<endl; // 5 5

Операция разыменования

Определение значения, на которое ссылается указатель p:

int * p, n, m = 5;

p = &m; // p присвоен адрес переменной m

n = * p; // переменная n примет значение 5

*p = -13; // переменная m примет значение -13

4. Увеличение/уменьшение указателя

Основными арифметическими операциями, применимыми к указателям, являются операции увеличения и уменьшения указателя:

имя_указателя + i и имя_указателя – i, где

имя_указателя – переменная типа указатель; i значение типа int.

Результатом операции имя_указателя+ i является указатель на i-й элемент после элемента, адрес которого находится в данном указателе, а имя_указателя- i – указатель на i-й элемент до элемента, адрес которого находится в данном указателе.

double d,*p; int n;

p = &d;

n = 3; p = p + n; // в p адрес увеличился на 24

p =n + p; // в p адрес увеличился ещё на 24

Если к указателю применяется операция инкремента (++) или операция декремента (--), то значение указателя увеличивается или уменьшается на размер данных, которые он адресует.

long b;

long * p; // p – указатель на тип long

p = &b; // в p адрес переменной b

p++; // в p адрес увеличится на 4

p--; // в p адрес уменьшится на 4

Вычитание указателей

При работе с указателями можно использовать операцию вычитания двух указателей:

имя_указателя1 – имя_указателя2

Операция имеет смысл, только если обе переменные являются указателями на один и тот же набор данных (например, массив). Результатом операции является целое число, которое показывает сколько элементов соответствующего типа можно расположить между адресами памяти, на которые указывают указатели имя_указателя1, имя_указателя2.

Операции сравнения

Указатели на данные одного и того же типа можно сравнивать с помощью обычных операций сравнения: ==, !=, >, >=, <, <=.

При сравнении указателей сравниваются их значения (хранимые в них адреса), а не значения величин, на которые данные указатели указывают. Результатом операций сравнения является целое число (0 или 1).

Сравнение указателей с числовыми значениями как сравнение данных разных типов не определено.

Операция sizeof

Для определения, сколько байтов отводится под указатель, можно использовать операцию sizeof(указатель). Количество байтов зависит от модели памяти (обычно 4 байта).



Дата добавления: 2022-05-27; просмотров: 77;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.