Operatory relacyjne i porównania języka C
Binarne operatory relacyjne i równości 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 wartość false. 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 testuje następujące relacje:
Operator | Przetestowano relację |
---|---|
< |
Pierwszy operand mniejszy niż drugi operand |
> |
Pierwszy operand większy niż drugi operand |
<= |
Pierwszy operand mniejszy lub równy drugiemu operandowi |
>= |
Pierwszy operand większy 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 Kojarzenie operatorów języka C.
Operandy mogą mieć typ całkowity, zmiennoprzecinkowy lub wskaźnikowy. Typy operandów mogą być różne. Operatory relacyjne wykonują zwykłe konwersje arytmetyczne na operandach całkowitych i zmiennoprzecinkowych. 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 dolnych. Adres pierwszego elementu tablicy jest "mniejszy niż" adres ostatniego elementu. W przypadku struktur wskaźniki do zadeklarowanych później składowych struktury są "większe niż" wskaźniki do elementów członkowskich zadeklarowanych wcześniej w strukturze. Wskaźniki do członków tej samej unii są równe.
Wartość wskaźnika może być porównywana z wartością stałą 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 stałej całkowitej z wartością 0 lub wskaźnika na
void
wartość . Jeśli dwa wskaźniki są wskaźnikami 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 color
wyliczenia: kolor red
, white
lub green
, odpowiednio. Jeśli col
zawiera wartość 0 po wykonaniu if
instrukcji, wszystkie instrukcje w zależności od if
instrukcji zostaną wykonane.
Zobacz też
Operatory relacyjne: <
, >
, <=
i >=
Operatory równości: ==
i !=