Поделиться через


Операторы отношения и равенства C

Операторы отношения и равенства сравнивают свои первые и вторые операнды для проверки истинности указанного отношения. Результатом реляционного выражения является 1, если проверенная связь имеет значение true, и 0, если значение false. Результат имеет тип int.

Синтаксис

relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression >= shift-expression

equality-expression:
relational-expression
equality-expression == relational-expression
equality-expression != relational-expression

Операторы отношения и равенства проверяют следующие отношения.

Оператор Проверяемое отношение
< Первый операнд меньше второго операнда
> Первый операнд больше второго операнда
<= Первый операнд меньше или равен второму операнду
>= Первый операнд больше или равен второму операнду
== Первый операнд равен второму операнду
!= Первый операнд не равен второму операнду

Первые четыре оператора в списке имеют более высокий приоритет, чем операторы равенства (== и !=). Сведения о приоритетах приведены в таблице Приоритет и ассоциативность операторов 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перечисления: цвет red, whiteили greenсоответственно. Если переменная col содержит значение 0 при выполнении оператора if , будут выполнены все операторы, зависящие от этого оператора if .

См. также

Реляционные операторы: <, >, <=и >=
Операторы равенства: == и !=