Операторы отношения и равенства C
Операторы отношения и равенства сравнивают свои первые и вторые операнды для проверки истинности указанного отношения. Результат выражения отношения равен 1, если проверенное отношение истинно, или 0, если отношение ложно. Результат имеет тип int.
Синтаксис
выражение-отношения:
выражение-сдвигавыражение-отношения < выражение-сдвига
выражение-отношения > выражение-сдвига
выражение-отношения <= выражение-сдвига
выражение-отношения >= выражение-сдвига
выражение-равенства:
выражение-отношениявыражение-равенства == выражение-отношения
выражение-равенства != выражение-отношения
Операторы отношения и равенства проверяют следующие отношения.
Оператор |
Проверяемое отношение |
---|---|
< |
Первый операнд меньше второго операнда |
> |
Первый операнд больше второго операнда |
<= |
Первый операнд меньше или равен второму операнду |
>= |
Первый операнд больше или равен второму операнду |
== |
Первый операнд равен второму операнду |
!= |
Первый операнд не равен второму операнду |
Первые четыре оператора в приведенном выше списке имеют более высокий приоритет, чем операторы равенства (== и !=). Сведения о приоритетах приведены в таблице Приоритет и ассоциативность операторов C.
Операнды могут быть целыми числами, числами с плавающей запятой или указателями. Типы операндов могут быть разными. Операторы отношения выполняют обычные арифметические преобразования с операндами целого типа и типа с плавающей запятой. Кроме того, с операторами отношения и равенства можно использовать следующие сочетания типов операндов:
Оба операнда любого оператора отношения или равенства могут быть указателями на один и тот же тип. Для операторов равенства (==) и неравенства (!=) результат сравнения показывает, указывают ли оба указателя на один и тот же адрес в памяти. Для других операторов отношения (<, >, <= и >=) результат сравнения показывает относительное положение двух адресов памяти для объектов, на которые указывают указатели. Операторы отношения сравнивают только смещения.
Сравнение указателей определено только для частей одного и того же объекта. Если указатели относятся к элементам массива, сравнение аналогично сравнению соответствующих индексов. Адрес первого элемента массива "меньше" адреса последнего элемента. В случае структур указатели на те члены структуры, которые были объявлены позже, "больше" указателей на члены, объявленные в структуре ранее. Указатели на члены одного объединения эквивалентны.
Значение указателя можно сравнивать с постоянным значением 0 на равенство (==) или неравенство (!=). Указатель со значением 0 называется указателем "null"; иными словами, он не указывает на допустимое расположение в памяти.
В операторах равенства используются те же правила, что и для операторов отношения, но допускаются дополнительные возможности: указатель можно сравнить с постоянным целочисленным выражением, имеющим значение 0, или с указателем на void. Два указателя "null" при сравнении считаются равными. Операторы равенства сравнивают как сегмент, так и смещение.
Примеры
Ниже показаны примеры операторов отношения и равенства.
int x = 0, y = 0;
if ( x < y )
Поскольку x и y равны, выражение в этом примере возвращает значение 0.
char array[10];
char *p;
for ( p = array; p < &array[10]; p++ )
*p = '\0';
Фрагмент в этом примере задает для каждого элемента массива array постоянное символьное значение null.
enum color { red, white, green } col;
.
.
.
if ( col == red )
.
.
.
Эти операторы объявляют переменную перечисления с именем col и тегом color. В любой момент времени эта переменная может содержать целочисленное значение 0, 1 или 2, которое представляет один из элементов перечисления color: красный, белый или зеленый цвет, соответственно. Если переменная col содержит значение 0, оператор if выполняется и все операторы, зависящие от оператора if, также будут выполнены.