18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!