Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
6.5 Associatività degli o<strong>per</strong>atori<br />
L’associatività indica in quale ordine sono considerati gli o<strong>per</strong>atori aventi la stessa priorità.<br />
sia l’o<strong>per</strong>atore di dereferimento * che l’o<strong>per</strong>atore di incremento ++ (sia che venga impiegato<br />
in forma postfissa, che in forma prefissa), hanno la stessa priorità nelle precedenze degli o<strong>per</strong>atori,<br />
ma la loro associatività va da destra a sinistra<br />
int vet[5];<br />
int *p;<br />
p = vet;<br />
*p++ = 10;<br />
p = vet;<br />
*++p = 10;<br />
p = vet;<br />
*p = 10;<br />
vet[1] = ++*p;<br />
L’espressione *p++ = 10 *p equivale a vet[0].<br />
L’espressione *++p = 10; (vet[0] = 10; *p equivale a vet[1]). L’espressione viene interpretata<br />
come *(p++): l’o<strong>per</strong>atore incremento (postfisso) è applicato <strong>alla</strong> variabile p (puntatore): l’effetto<br />
è quello dell’utilizzo dell’area di memoria puntata dal puntatore p (*p) ed in seguito viene<br />
effettuato l’incremento del puntatore (p++).<br />
L’espressione *++p = 10 (vet[1] = 10; *p equivale a vet[1]) è interpretata come *(++p):<br />
l’o<strong>per</strong>atore di incremento è applicato a p in forma prefissa, quindi prima viene incrementato<br />
il puntatore p (++p), e poi (con il valore aggiornato del puntatore) viene effettuato l’accesso<br />
all’area di memoria puntata da p incrementato.<br />
Nell’ultima espressione vet[1] = ++*p (vet[1] = 11; *vet[0] = 11; *p equivale a vet[0]), ++*p<br />
è equivalente a ++(*p), cioè l’area di memoria puntata da p viene acceduta subito con l’o<strong>per</strong>atore<br />
di indirizzamento *; in seguito, l’area di memoria viene incrementata dall’o<strong>per</strong>atore di incremento<br />
++ in forma prefissa, e il valore risultante viene poi usato nell’assegnamento. Da notare che<br />
l’espressione (*p)++ non può essere invece scritta se non con l’uso delle parentesi. In questo<br />
caso, verrebbe incrementato il contenuto (*p) a cui punta p, ma dopo del suo utilizzo a causa<br />
dell’o<strong>per</strong>atore di incremento ++ usato in forma postfissa.<br />
Per una maggiore chiarezza di lettura del codice, soprattutto in fase di manutenzione di un<br />
programma, è consigliabile utilizzare le parentesi <strong>per</strong> evidenziare l’associatività degli o<strong>per</strong>atori,<br />
<strong>per</strong> evitare di dover ricorrere alle regole sintattiche del linguaggio.<br />
55