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.

Definizione

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.

Definizione

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:

  1. Gli operatori di incremento e decremento postfissi sono associativi a destra;
  2. Gli operatori di incremento e decremento prefissi sono associativi a sinistra.
Nota

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.