Информатика и технология программирования


Операции над указателями - часть 2


Это значение адреса называется NULL-УКАЗАТЕЛЕМ или "пустым" указателем. Считается, что указатель с таким значением не является корректным (указывает "в никуда"). Обычно такое значение определяется в стандартной библиотеке ввода-вывода в виде &#35define NULL 0.

Значение NULL может быть присвоено любому указателю. Если указатель по логике работы программы может иметь такое значение, то перед косвенным обращением по нему его нужно проверять на достоверность:


int *p,a;
if () p=NULL; else p=&#38a; ...
if (p !=NULL) *p = 5; ...

СРАВНЕНИЕ УКАЗАТЕЛЕЙ НА БОЛЬШЕ-МЕНЬШЕ: при сравнении указателей производится сравнение соответствующих адресов как беззнаковых переменных. Естественный смысл такого сравнения имеется, если оба указателя ссылаются на элементы одного и того же массива, тогда соотношение " больше-меньше" следует понимать как " ближе-дальше" к началу массива:


// Перестановка элементов массива симметрично середины


int A[20],i,j,x;
for(i=0,j=19; i&#60j; i++, j--)
{ x = A[i]; A[i] = A[j]; A[j] = x; }
int A[20],*pi,*pj,x;
for (pi=A,pj=A+19; pi &#60 pj; pi++, pj--)
{ x = *pi; *pi = *pj: *pj = x; }

РАЗНОСТЬ ЗНАЧЕНИЙ УКАЗАТЕЛЕЙ: в случае, когда указатели ссылаются на один и тот же массив, их разность понимается как "расстояние между ними", выраженную в количестве указуемых переменных.

Все перечисленные операции, в которых применяются два указателя (присваивание, сравнение, вычитание), рассматривались для указателей с одинаковыми типами указуемых переменных. Случай с использованием указателей различных типов (преобразование типов указателей) имеет особое значение: он вплотную связан с принципами управления памятью в Си-программах и потому рассматривается отдельно (см.4.4).




Начало  Назад  Вперед