
Il C contiene molti operatori, e per via del meccanismo di precedenza fra operatori, le interazioni fra più operatori possono diventare complesse da capire.
X = 5+3*6
X riceve in assegnazione il valore 23 e non il valore 48, perchè in C la moltiplicazione e la divisione hanno una precedenza maggiore rispetto all'addizione e sottrazione.
char *a[10];
invece, che cosa significa? a è un puntatore singolo ad un array di 10 caratteri oppure è un array di 10 puntatori a carattere? Senza conoscere la precedenza fra operatori in C, non vi è modo di scoprilo.
La tabella seguente, tratta da C programming language di Kernighan e Ritchie, illustra la gerarchia di precedenze in C. Man mano che si scende nella tabella gli operatori hanno via via meno importanza.
Operatori Associatività
( [ - . da sinistra a destra
! - ++ -{- + * & (type-cast) sizeof da destra a sinistra
(nella linea precedente, +, - e * sono da considerarsi operatori unari)
* / % da sinistra a destra
+ - da sinistra a destra
<< >> da sinistra a destra
< <= > >= da sinistra a destra
== != da sinistra a destra
& da sinistra a destra
^ da sinistra a destra
| da sinistra a destra
&& da sinistra a destra
|| da sinistra a destra
?: da sinistra a destra
= += -= *= /= %= &= ^= |= <<= >>= da destra a sinistra
, da sinistra a destra
Grazie a questa tabella, si può interpretare char *a[10] come un array di 10 puntatori a carattere. Si consiglia di cercare di comprendere la tabella, ricordandovi che a volte piccoli e grandi bug possono essere dovuti ad un'errata interpretazione (da parte vostra!) della precedenza fra operatori.
