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
, white
o .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 !=