Operadores relacionais e de igualdade C

Os operadores relacionais binários e de igualdade comparam o primeiro operando ao segundo operando para testar a validade da relação especificada. O resultado de uma expressão relacional será 1 se a relação testada for verdadeira e 0 se for falsa. O tipo de resultado é int.

Sintaxe

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

Os operadores relacionais e de igualdade testam as seguintes relações:

Operador Relação testada
< Primeiro operando menor que o segundo operando
> Primeiro operando maior que o segundo operando
<= Primeiro operando menor ou igual ao segundo operando
>= Primeiro operando maior ou igual ao segundo operando
== Primeiro operando igual ao segundo operando
!= Primeiro operando não é igual ao segundo operando

Os quatro primeiros operadores da lista têm uma precedência maior do que os operadores de igualdade (== e !=). Consulte as informações de precedência na tabela Precedência e associatividade dos operadores de C.

Os operandos podem ter o tipo integral, flutuação ou ponteiro. Os tipos dos operandos podem ser diferentes. Os operadores relacionais executam as conversões aritméticas comuns em operandos do tipo integral ou flutuação. Além disso, você pode usar as seguintes combinações de tipos de operando com os operadores relacionais e de igualdade:

  • Ambos os operandos de qualquer operador relacional ou de igualdade podem ser ponteiros para o mesmo tipo. Para os operadores de igualdade (==) e de desigualdade (!=), o resultado da comparação indica se os dois ponteiros endereçam o mesmo local da memória. Para os outros operadores relacionais (<, >, <=e >=), o resultado da comparação indica a posição relativa dos dois endereços de memória dos objetos apontados. Os operadores relacionais são apenas deslocamentos.

    A comparação do ponteiro é definida apenas para partes do mesmo objeto. Se os ponteiros fizerem referência aos membros de uma matriz, uma comparação é equivalente à comparação dos subscritos correspondentes. O endereço do primeiro elemento da matriz é "menor que" o endereço do último elemento. Para estruturas, os ponteiros para membros da estrutura declarados posteriormente são ponteiros "maiores que" para os membros declarados anteriormente na estrutura. Os ponteiros para os membros da mesma união são iguais.

  • Um valor de ponteiro pode ser comparado ao valor da constante 0 para igualdade (==) ou desigualdade (!=). Um ponteiro com o valor 0 é chamado de ponteiro "nulo", ou seja, ele não aponta para um local de memória válido.

  • Os operadores de igualdade seguem as mesmas regras que os operadores relacionais, mas oferecem mais possibilidades: um ponteiro pode ser comparado a uma expressão integral constante com o valor 0 ou a um ponteiro para void. Se os dois ponteiros forem nulos, eles serão comparados como iguais. Os operadores de igualdade comparam o segmento e o deslocamento.

Exemplos

Estes exemplos ilustram operadores relacionais e de igualdade.

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

Como x e y são iguais, a expressão neste exemplo gera o valor 0.

char array[10];
char *p;

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

O fragmento neste exemplo define cada elemento de array como uma constante de caractere nulo.

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

Essas instruções declaram uma variável de enumeração chamada col com a marca color. A qualquer momento, a variável pode conter o valor inteiro 0, 1 ou 2, que representa um dos elementos do conjunto de enumeração color: a cor red, white ou green, respectivamente. Se col contiver 0 quando a instrução if for executada, todas as instruções dependentes de if serão executadas.

Confira também

Operadores relacionais: <, >, <= e >=
Operadores de igualdade: == e !=