Хороший вопрос, Джеймс и GMan.Только что искал свободно загружаемый "Новый стандарт C" Дереком М. Джонсом для "указателя прошлого", и мой первый хит был:
Если выражение P указывает на элемент объекта массива и выражениеQ указывает на последний элемент того же объекта массива, выражение указателя Q + 1 сравнивается больше, чем P ... даже если Q + 1 не указывает на элемент объекта массива ...
Onсегментированные архитектуры, увеличивающие указатель за конец сегмента, заставляют адрес переносить сегментированную архитектуру к началу этого сегмента (обычно это адрес ноль).Если в таком сегменте выделен массив, либо реализация должна убедиться, что после массива есть место, чтобы иметь место после конечного адреса, либо использовать другой метод реализации для обработки этого случая (например, если сегментused является частью представления указателя, может быть назначено специальное значение после значения конечного сегмента) ...
Модель реляционного оператора C позволяет обрабатывать указатели на объекты так же, как индексы в объектах массива,Реляционные сравнения между индексами в двух разных объектах массива (которые не являются подобъектами более крупного объекта) редко имеют какое-либо значение, и стандарт не определяет такую поддержку указателей.Некоторые приложения должны использовать информацию об относительном расположении различных объектов в хранилище.Однако такое использование не было сочтено достаточно полезным для Комитета, чтобы указывать модель, определяющую поведение ...
Большинство реализаций не выполняют никаких проверок до какой-либо операции со значениями, имеющими тип указателя.Большинство процессоров используют те же инструкции для выполнения реляционных сравнений с типами указателей, что и для арифметических типов.Для процессоров, которые используют архитектуру сегментированной памяти, значение указателя часто представляется с использованием двух компонентов: номера сегмента и смещения в этом сегменте.Следствием этого представления является то, что существует много преимуществ в выделении хранилища для объектов таким образом, что оно помещается в пределах одного сегмента (то есть хранилище для объекта не охватывает границу сегмента).Одним из преимуществ является оптимизация, включающая сгенерированный машинный код для некоторых из реляционных операторов, который должен только проверять компонент смещения сегмента.Это может привести к ситуации, когда p> = q ложно, но p> q верно, когда p и q указывают на разные объекты.