Аддитивные операции (сложение и вычитание)
Аддитивные операции имеют ограничения при работе с указателями: два указателя нельзя складывать, однако к указателю можно прибавить целую величину. При этом результат зависит не только от значения слагаемого, но и от типа указателя.
Пример 6 float *k, *i; int j; char *s; j=k+i; //ошибка, указатели нельзя складывать k=k+2; // + 8 к числовому значению указателя s=s+2; // +2 к числовому значению указателя
Два указателя можно вычитать друг из друга, если они одного типа. Эта операция дает расстояние между объектами. При этом расстояние измеряется в единицах, равных размеру элемента данного типа. Пример 7 int x[5], *i, *k, j; i=&x[0]; k=&x[4]; j=k-i; //j=4 Отметим, что j=4, а не 8, как можно было бы предположить исходя из того, что каждый элемент массива х занимает 2 байта.
Сравнение указателей Если два указателя установлены на одинаковый тип данных, то их можно сравнивать в операциях: ==,!=, <, >, <=, >=. При этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина). Пример 8 int а[10], *ptr1, *ptr2; ptr1=a+5; ptr2=f+7; if (ptr1>ptr2) a[3]=4; В данном примере значение ptr1 меньше значения ptr2, и потому оператор a[3]=4 не будет выполнен. Любой указатель можно проверить на равенство (= =) или неравенство (!=) со специальным значением NULL, которое означает отсутствие адреса в указателе.
|