Condividi tramite


Operatori relazionali e operatori di uguaglianza C

Gli operatori relazionali e di uguaglianza binari confrontano il primo operando con il secondo per testare la validità della relazione specificata. Il risultato di un'espressione relazionale è 1 se la relazione testata è true e 0 se è false. Il tipo del risultato è int.

Sintassi

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

Gli operatori relazionali e di uguaglianza testano le relazioni seguenti:

Operatore Relazione testata
< Primo operando minore del secondo operando
> Primo operando maggiore del secondo operando
<= Primo operando minore o uguale al secondo operando
>= Primo operando maggiore o uguale al secondo operando
== Primo operando uguale al secondo operando
!= Primo operando non uguale al secondo operando

I primi quattro operatori nell'elenco hanno una precedenza maggiore rispetto agli operatori di uguaglianza (== e !=). Per informazioni sulla precedenza, vedere la tabella Precedenza e associatività degli operatori C.

Gli operandi possono disporre di un tipo integrale, a virgola mobile o puntatore. I tipi di operandi possono essere diversi. Gli operatori relazionali eseguono conversioni aritmetiche consuete su operandi di tipo integrale e a virgola mobile. Inoltre, è possibile utilizzare le seguenti combinazioni di tipi di operando con gli operatori relazionali e di uguaglianza:

  • Entrambi gli operandi di qualsiasi operatore relazionale o di uguaglianza possono essere puntatori allo stesso tipo. Per gli operatori di uguaglianza (==) e di disuguaglianza (!=) il risultato del confronto indica se i due puntatori sono indirizzati alla stessa posizione di memoria. Per gli altri operatori relazionali (<, >, <=e >=), il risultato del confronto indica la posizione relativa dei due indirizzi di memoria degli oggetti a cui punta. Gli operatori relazionali confrontano solo gli offset.

    Il confronto tra puntatori viene definito solo per le parti dello stesso oggetto. Se i puntatori fanno riferimento ai membri di una matrice, il confronto è equivalente al confronto dei pedici corrispondenti. L'indirizzo del primo elemento della matrice è "minore di" quello dell'ultimo elemento. Per le strutture, i puntatori ai membri della struttura dichiarati successivamente sono puntatori "maggiori di" ai membri dichiarati in precedenza nella struttura. I puntatori ai membri della stessa unione sono uguali.

  • Un valore del puntatore può essere confrontato con il valore costante 0 per uguaglianza (==) o disuguaglianza (!=). Un puntatore con valore 0 viene chiamato puntatore "null" ; ovvero, non punta a una posizione di memoria valida.

  • Gli operatori di uguaglianza seguono le stesse regole degli operatori relazionali, ma consentono più possibilità: un puntatore può essere confrontato con un'espressione integrale costante con valore 0 o a un puntatore a void. Se due puntatori sono entrambi puntatori null, vengono considerati uguali. Gli operatori di uguaglianza confrontano segmento e offset.

Esempi

Questi esempi illustrano gli operatori relazionali e di uguaglianza.

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

Poiché x e y sono uguali, l'espressione in questo esempio produce il valore 0.

char array[10];
char *p;

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

Il frammento in questo esempio imposta ogni elemento array su una costante di carattere null.

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

Queste istruzioni dichiarano una variabile di enumerazione denominata col con il tag color. In qualsiasi momento, la variabile può contenere un valore intero pari a 0, 1 o 2, che rappresenta uno degli elementi dell'enumerazione impostatacolor: rispettivamente il colore red, whiteo .green Se col contiene 0 quando viene eseguita l'istruzione if , verranno eseguite tutte le istruzioni a seconda di if .

Vedi anche

Operatori relazionali: <, >, <=e >=
Operatori di uguaglianza: == e !=