Во-первых, вы процитировали часть параграфа, первая часть объясняет, что это ссылки, я включил этот пункт здесь:
Когда два указателя сравниваются, результат зависит от относительного расположения в адресное пространство объектов, на которые указывает. Если два указателя на типы объектов указывают на тот же объект или оба указывают один за последним элементом одного и того же объекта массива, они сравниваются с . Если объекты, на которые указывают, являются членами одного и того же совокупного объекта, указатели для объявленных позже элементов структуры сравниваются больше, чем указатели на члены , объявленные ранее в структуре, и указатели на элементы массива с большим индексом значения сравниваются больше, чем указатели на элементы тот же массив с более низкими значениями индекса. Все указатели на члены одного и того же объекта объединения сравниваются одинаково. Если выражение P указывает на элемент объекта массива, а выражение Q указывает на последний элемент одного и того же объекта массива, выражение указателя Q + 1 сравнивается больше P. Во всех остальных случаях поведение не определено.
В принципе, немного вы ссылка ссылается на то, что обычно указатель должен всегда точка либо в одиночку стенд объект к элементу массива объектов или один мимо конца массива объектов. Как вы можете видеть, обычно приращение указателя, который уже указывает на последний элемент массива, приведет к недопустимому указателю, и действительно, этот указатель в стандарте никогда не должен быть разыменован, однако его можно использовать для одного частного случая, могут быть установлены или сопоставлены с другим указателем.
Это полезно в программе, в которой вы увеличиваете указатель, а затем проверяете, прошел ли он мимо конца массива и прекратите работу, если это произойдет. Например.
int foo = 0;
int ArrSize = 6;
int bar[ArrSize];
while(foo < ArrSize)
{
foo++;
printf("%d", bar + 3 < bar + foo);
}
Будет законным, даже в последнем случае, когда foo указывает на один за концом массива.
Примечание: этот пример очень надуман, но демонстрирует точку.
Если не для этого правила, эта программа будет неопределенным поведением.
Вам не хватает предложения перед предыдущим: «указатели на элементы массива с большими значениями индекса больше, чем указатели на элементы того же массива с нижним индексом».Вы цитируете исключение, чтобы разрешить полуоткрытые диапазоны, такие как ['a',' a + 3'). – dyp
@ DyP, О, ну. Я должен был прочитать еще пять раз, чтобы понять это. Другой глупый вопрос формирует мою сторону :( – Vorac
Это стандарт, некоторые утверждают, что это стандарт для сложной и неинтуитивной формулировки;) – dyp