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

Присваивание. Указателю можно присвоить только адрес или указатель того же типа. Если все же необходимо присвоить адреса разных типов, то надо использовать операцию явного преобразования типа. Для указателей неявное преобразование типа не работает.

Пример.

1. int *A = (int *)malloc(20);

2. int **A; char *c; A = (int **)c;

Операция разыменования * возвращает значение, хранящееся в ячейке по адресу, содержащемуся в указателе.

Пример.

int i = 5, *pi = &i;

*pi = 10;// i =10

Получение адреса указателя. Подобно любым переменным, переменная типа указатель имеет адрес и значение. Операция & сообщает нам, где находится сам указатель.

Операция & добавляет к типу результата одну *.

Пример.

int n=20, *pn = &n, **ppn;

ppn = &pn;

Увеличение указателя. К указателю ptr можно прибавлять и вычитать любое целое число n. При этом указатель изменяется на количество байт равное n, умноженному на размер в байтах базового типа указателя ptr.

Соответственно, к указателям применимы операции инкремента ++ и декремента --.

Пример.

int n=20, *pn = &n, **ppn;

pn = pn + 5;

// базовый тип pn – int, занимает 2 байта, поэтому pn увеличится на 10 байт.

ppn = &pn+5;

// базовый тип выражения &pn – int*, занимает 4 байта для модели large, поэтому pn увеличится на 20 байт.

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

Разность указателей. Можно находить разность двух указателей одного типа. Результатом является количество элементов базового типа, находящимися между этими указателями. Результат имеет тип int для ближних указателей и тип long для дальних указателей.

Пример.

int A[10];

int *px = &A[1], *py = &A[9];

int n;

n = (int)(py - px); // n = 8

Одинарный указатель – это одномерный массив

Одинарный указатель можно рассматривать, как одномерный массив и применять к нему операцию индексации.

int n=10, *pi;

pi = &i;

Тогда pi[0] – это переменная i,. pi[1] – это переменная типа int, расположенная справа от i, pi[-1] – это переменная типа int, расположенная слева от i.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: