Operatori di Incremento e Decremento in Linguaggio C
Una delle operazioni più comuni in linguaggio C è l'incremento di uno oppure il decremento di uno di una variabile.
In linguaggio C esistono due operatori appositi che prendono il nome di operatore di incremento e operatore di decremento. In questa lezione vedremo come funzionano e come usarli.
Operatori di Incremento e Decremento
In linguaggio C, così come per molti linguaggi di programmazione, una delle operazioni più comuni è quella di incrementare o decrementare di uno il valore di una variabile.
In C è possibile farlo usando l'operatore di assegnamento:
int a = 0;
a = a + 1;
a = a - 1;
Inoltre è possibile anche usare gli operatori di assegnamento composti:
int a = 0;
a += 1;
a -= 1;
Questi operatori sono molto comodi, ma non sono i più usati. Infatti, in C esistono anche gli operatori di incremento e decremento che permettono di sintetizzare ancora di più il codice. Tali operatori sono l'operatore di incremento ++
e l'operatore di decremento --
.
L'operatore di incremento ++
incrementa di uno il valore della variabile. L'operatore di decremento --
decrementa di uno il valore della variabile. Tuttavia, questi due operatori possono essere utilizzati in due modi differenti:
- Postfisso: l'operatore viene applicato dopo il valore della variabile
- Prefisso: l'operatore viene applicato prima del valore della variabile
Adesso li andremo a vedere nel dettaglio.
Operatore di Incremento e Decremento Postfisso
Nel caso degli operatori di incremento e decremento postfisso, l'operatore viene applicato dopo il valore della variabile. Ad esempio:
int a = 0;
a++;
In questo caso, il valore di a
viene incrementato di uno dopo che viene letto il valore di a
. Quindi, in questo caso, il valore di a
è 1.
Analogamente per l'operatore di decremento:
int a = 0;
a--;
In questo caso, il valore di a
viene decrementato di uno dopo che viene letto il valore di a
. Quindi, in questo caso, il valore di a
è -1.
Dato che questi operatori sono pur sempre degli operatori di assegnamento essi sono anche considerati dal compilatore come espressioni che restituiscono un risultato. Tuttavia, essendo postfissi, il risultato dell'espressione è il valore della variabile prima dell'incremento o del decremento. Ad esempio:
int a = 0;
int b = 0;
b = a++;
In questo caso, il valore di b
è 0, mentre il valore di a
è 1. Questo perché il risultato dell'espressione a++
è il valore di a
prima dell'incremento, quindi 0. Analogamente nel caso dell'operatore di decremento postfisso.
Operatori di Incremento e Decremento Postfisso
L'operatore di incremento postfisso ++
incrementa di uno il valore della variabile. L'operatore di decremento postfisso --
decrementa di uno il valore della variabile. La sintassi è la seguente:
a++;
a--;
Il risultato di tali espressioni è il valore della variabile prima dell'incremento o del decremento.
Essendo operatori di assegnamento, essi hanno degli effetti collaterali in quanto modificano il valore della variabile.
Vediamo con un esempio il funzionamento di tali operatori.
int a = 5;
printf("%d\n", a++);
printf("%d\n", a);
Il risultato dell'esecuzione di questo pezzo di codice è il seguente:
5
6
La prima printf
stampa il valore di a
prima dell'incremento, quindi 5. La seconda printf
stampa il valore di a
dopo l'incremento, quindi 6.
Operatore di Incremento e Decremento Prefisso
Nel caso degli operatori di incremento e decremento prefisso, l'operatore viene applicato prima del valore della variabile. Ad esempio:
int a = 0;
++a;
A differenza del caso postfisso, in questo caso il valore di a
viene incrementato di uno prima che venga letto il valore di a
. Per cui il risultato dell'espressione ++a
è il valore di a
dopo l'incremento, quindi 1. Analogamente nel caso dell'operatore di decremento prefisso.
Ad esempio:
int a = 0;
int b = 0;
b = ++a;
In questo caso sia il valore di b
che il valore di a
sono 1. Questo perché il risultato dell'espressione ++a
è il valore di a
dopo l'incremento, quindi 1.
Operatori di Incremento e Decremento Prefisso
L'operatore di incremento prefisso ++
incrementa di uno il valore della variabile. L'operatore di decremento prefisso --
decrementa di uno il valore della variabile. La sintassi è la seguente:
++a;
--a;
Il risultato di tali espressioni è il valore della variabile dopo l'incremento o il decremento.
Essendo operatori di assegnamento, essi hanno degli effetti collaterali in quanto modificano il valore della variabile.
Vediamo con un altro esempio il funzionamento di tali operatori.
int a = 5;
printf("%d\n", ++a);
printf("%d\n", a);
Il risultato dell'esecuzione di questo pezzo di codice è il seguente:
6
6
La prima printf
stampa il valore di a
dopo l'incremento, quindi 6. Stesso dicasi per la seconda printf
.
Utilizzo degli Operatori di Incremento e Decremento nelle espressioni
Sebbene questi due operatori siano molto comodi da utilizzare nella pratica, bisogna fare attenzione quando li si combina in espressioni più complesse.
Vediamo un esempio:
a = 2;
b = 3;
c = a++ + ++b;
In questo caso, il risultato dell'ultima espressione è c = 6
. Infatti, alla variabile a
viene applicato l'operatore postfisso, per cui nell'espressione viene utilizzato il suo valore originale che è 2. Viceversa, per la variabile b
viene usato l'operatore prefisso, per cui nell'espressione sarà utilizzato il suo valore dopo l'incremento, ossia 4.
In generale, utilizzare gli operatori di incremento e decremento in espressioni complesse può portare a risultati inaspettati. Per cui è sempre meglio evitare di utilizzarli in questo modo.
In ogni caso, quando li si usa in espressioni bisogna tenere a mente che:
- Gli operatori di incremento e decremento postfissi sono associativi a destra;
- Gli operatori di incremento e decremento prefissi sono associativi a sinistra.
Evitare di combinare operatori di incremento e decremento in espressioni complesse
Buona norma di programmazione è evitare di combinare operatori di incremento e decremento in espressioni complesse in maniera tale da rendere il codice poco leggibile.
In Sintesi
In questa lezione abbiamo studiato due operatori molto utilizzati nella programmazione in linguaggio C: gli operatori di incremento e decremento.
In particolare abbiamo visto che questi operatori sono molto utili per incrementare o decrementare di uno il valore di una variabile. Inoltre abbiamo visto che questi operatori possono essere utilizzati in due modi differenti: postfisso e prefisso.
A seconda del modo in cui vengono utilizzati, il risultato di tali operatori è diverso. In particolare, se l'operatore viene utilizzato in modo postfisso, il risultato dell'espressione è il valore della variabile prima dell'incremento o del decremento. Se invece l'operatore viene utilizzato in modo prefisso, il risultato dell'espressione è il valore della variabile dopo l'incremento o il decremento.