Udostępnij za pośrednictwem


Operatory relacyjne i porównania języka C

Operatory relacyjne i równości binarne porównują swój pierwszy operand z drugim operandem, aby przetestować ważność określonej relacji. Wynikiem wyrażenia relacyjnego jest 1, jeśli przetestowana relacja ma wartość true i 0, jeśli jest to fałsz. Typ wyniku to int.

Składnia

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

Operatory relacyjne i równości testować następujące relacje:

Operator Przetestowano relację
< Pierwszy operand mniej niż drugi operand
> Pierwszy operand większy niż drugi operand
<= Pierwszy operand mniejszy lub równy drugiemu operandowi
>= Pierwszy operand większy niż lub równy drugiemu operandowi
== Pierwszy operand równy drugiemu operandowi
!= Pierwszy operand nie jest równy drugiemu operandowi

Pierwsze cztery operatory na liście mają wyższy priorytet niż operatory równości (== i !=). Zobacz informacje o pierwszeństwie w tabeli Pierwszeństwo i Skojarzenie operatorów języka C.

Operandy mogą mieć typ całkowitoliczby, zmiennoprzecinkowy lub wskaźnikowy. Typy operandów mogą być różne. Operatory relacyjne wykonują zwykłe konwersje arytmetyczne na operandach typu całkowitego i zmiennoprzecinkowego. Ponadto można użyć następujących kombinacji typów operandów z operatorami relacyjnymi i równości:

  • Oba operandy dowolnego operatora relacyjnego lub równości mogą być wskaźnikami do tego samego typu. W przypadku operatorów równości () i nierówności (==!=) wynik porównania wskazuje, czy dwa wskaźniki odnoszą się do tej samej lokalizacji pamięci. W przypadku innych operatorów relacyjnych (<, , ><=i >=), wynik porównania wskazuje względną pozycję dwóch adresów pamięci wskazywanych przez obiekty. Operatory relacyjne porównują tylko przesunięcia.

    Porównanie wskaźników jest definiowane tylko dla części tego samego obiektu. Jeśli wskaźniki odwołują się do elementów członkowskich tablicy, porównanie jest równoważne porównywaniu odpowiednich indeksów podrzędnych. Adres pierwszego elementu tablicy to "mniej niż" adres ostatniego elementu. W przypadku struktur wskaźniki do składowych zadeklarowanych później są "większe niż" wskaźniki do elementów członkowskich zadeklarowanych wcześniej w strukturze. Wskaźniki do członków tego samego związku są równe.

  • Wartość wskaźnika można porównać do stałej wartości 0 dla równości (==) lub nierówności (!=). Wskaźnik o wartości 0 jest nazywany wskaźnikiem "null"; oznacza to, że nie wskazuje prawidłowej lokalizacji pamięci.

  • Operatory równości są zgodne z tymi samymi regułami co operatory relacyjne, ale umożliwiają uzyskanie większej liczby możliwości: wskaźnik można porównać do wyrażenia całkowitego stałej z wartością 0 lub wskaźnikiem do void. Jeśli dwa wskaźniki mają oba wskaźniki o wartości null, są porównywane jako równe. Operatory równości porównują zarówno segment, jak i przesunięcie.

Przykłady

Te przykłady ilustrują operatory relacyjne i równości.

int x = 0, y = 0;
if ( x < y )

Ponieważ x i y są równe, wyrażenie w tym przykładzie daje wartość 0.

char array[10];
char *p;

for ( p = array; p < &array[10]; p++ )
    *p = '\0';

Fragment w tym przykładzie ustawia każdy element array na stałą znaku null.

enum color { red, white, green } col;
   .
   .
   .
   if ( col == red )
   .
   .
   .

Te instrukcje deklarują zmienną wyliczenia o nazwie col z tagiem color. W dowolnym momencie zmienna może zawierać wartość całkowitą 0, 1 lub 2, która reprezentuje jeden z elementów zestawu colorwyliczenia: kolor red, whitelub green, odpowiednio. Jeśli col zawiera wartość 0 po wykonaniu if instrukcji, wszystkie instrukcje w zależności od instrukcji if zostaną wykonane.

Zobacz też

Operatory relacyjne: <, >, <=i >=
Operatory równości: == i !=