Barninga Z
a- a+

Gli operatori: autoincremento e autodecremento

Autoincremento e autodecremento 

Gli operatori di (auto)incremento e (auto)decremento sommano e, rispettivamente, sottraggono 1 alla variabile a cui sono applicati. L'espressione 

++a;

incrementa di 1 il valore di a, mentre 

--a;

lo decrementa. E' molto importante ricordare che essi possono essere prefissi o suffissi; possono, cioè, sia precedere che seguire la variabile a cui sono applicati. Il loro significato rimane il medesimo (sommare o sottrarre 1), ma il loro livello di precedenza cambia. Nell'espressione 

a = ++b;

ad a viene assegnato il valore di b incrementato di 1, perché, in realtà, dapprima è incrementata la variabile b e successivamente il suo nuovo valore è assegnato ad a. Invece, con 

a = b++;

ad a è assegnato il valore di b e solo successivamente questa è incrementata. Analoghe considerazioni valgono nel caso dell'operatore di decremento. Ancora: nella 

if(a > ++b) ....

la condizione è valutata dopo avere incrementato b, mentre nella 

if(a > b++) ....

dapprima è valutata la condizione e poi viene incrementata b

La differenza tra operatore prefisso e suffisso, però, scompare quando l'autoincremento della variabile sia parametro di una chiamata a funzione: con riferimento ad una riga come 

printf("%d
" ,++a);

spesso non è possibile sapere a priori se a viene incrementata prima di passarne il valore a printf(), o se, al contrario, l'incremento è effettuato in seguito. Ci si potrebbe aspettare che la scrittura ++a determini l'incremento prima della chiamata, mentre a++ lo determini dopo; tuttavia il C non stabilisce una regola univoca. Ciò significa che ogni compilatore può regolarsi come meglio crede. E questo a sua volta significa che possono esserci compilatori che fissano a priori un modo univoco di procedere, ed altri che invece decidono caso per caso in fase di compilazione, sulla base, ad esempio, di opzioni di ottimizzazione del codice in funzione della velocità, della dimensione, e così via. E' dunque indispensabile consultare molto attentamente la documentazione del compilatore o, meglio ancora, evitare possibili ambiguità dedicando all'incremento della variabile un'istruzione separata dalla chiamata a funzione, anche in vista di un possibile porting del programma ad altri compilatori. 

Gli operatori "++" e "--" modificano sempre il valore della variabile[2] a cui sono applicati. 

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Pier Paolo
Condividi le tue opinioni su questo articolo!