Указатели на указатели

Массивы указателей.

Сравнение указателей

При сравнении указателей могут использоваться отношения любого вида (">", ">=", "<", "<=", "==", "!="). Наиболее важными видами проверок являются отношения равенства или неравенства. Остальные отношения порядка имеют смысл только для указателей на последовательно размещенные объекты (элементы одного массива).

Разность двух указателей дает число объектов адресуемого ими типа в соответствующем диапазоне адресов. Очевидно, что уменьшаемый и вычитаемый указатель также должны соответствовать одному массиву, иначе результат операции не имеет практической ценности.

Любой указатель можно сравнивать со значением NULL, которое означает недействительный адрес. Значение NULL можно присваивать указателю как признак пустого указателя. NULL заменяется препроцессором на выражение (void *)0.

Указатели, как и переменные любого другого типа, могут объединяться в массивы. Объявление массива указателей на целые числа имеет вид:

int *b[10], y;

Теперь каждому из элементов массива можно присвоить адрес целочи­сленной переменной y, например: b[1]=&y;

Чтобы теперь найти значение переменной y через данный элемент массива а, необходимо записать *b[1].

В языке Си можно описать и переменную типа «указатель на указатель». Это ячейка оперативной памяти, в которой будет храниться адрес указателя на какую либо переменную. Признак такого типа данных – повторение символа «*» перед идентификатором переменной. Количество символов «*» определяет уровень вложенности указателей друг в друга. При объявлении указателей на указатели возможна их одновременная инициализация. Например:

int y=5;

int *p1=&y;

int **pp1=&p1;

int ***ppp1=&pp1;

Теперь присвоим целочисленной переменной y новое значение, например 10. Одинаковое присваивание произведут следующие операции:

y=10; *p1=10; **pp1=10; ***ppp1=10;

Для доступа к области ОП, отведенной под переменную y можно использовать и индексы. Справедливы следующие аналоги:

*p1 p1[0] **pp1 pp1[0][0] ***ppp1 ppp1[0][0][0]


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



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