Expériences


Opérateurs ++ et —

Posté dans Programmation par Enisséo le 25 mars 2008

Ce court article a pour objectif de répondre à une question fondamentale et dont la plupart des programmeurs ont une réponse erronée : Quelle est la différence entre i++ et ++i ?

Avant de donner la réponse, une petite question pour se mettre en situation : Quelles vont être les valeurs de j et de k à la fin de l’exécution de ce code ?

int i = 5;
int j = ++i + i--;
int k = i++ + --i;

On dit souvent que l’opération ++i est moins prioritaire que i++, ou encore que i++ incrémente la variable après tandis que i-- l’incrémente avant. En réalité, l’opérateur unaire ++ (ou –) effectue la même action, qu’il soit placé avant ou après la variable : il incrémente celle-ci. Après l’exécution de l’opération, la variable est donc directement à la nouvelle valeur. Par exemple, s’il était possible de mettre en pause l’exécution du code int i = 5; j = i++ * 2; juste avant la multiplication, on pourrait constater que la variable i vaut bien 6. Cependant, la différence provient de la valeur retournée par l’opération. La valeur de l’opération ++i est celle de la nouvelle valeur de i, après incrémentation, tandis que i++ retourne l’ancienne valeur de i, avant incrémentation.

Ainsi, la réponse à la question du début de l’article est : j = 12, k = 10.

En effet, dans l’expression de j, ++i retourne la valeur de i après incrémentation, soit 6. Ensuite, i-- retourne la valeur de i avant décrémentation, soit 6 aussi, tandis que i retourne à sa valeur initiale 5. On obtient donc j = 6 + 6 = 12. Pour k, c’est l’inverse : la valeur avant incrémentation est d’abord renvoyée (5) tandis que i a comme nouvelle valeur 6, puis avec --i c’est la valeur de i après décrémentation qui est retournée, soit 5. k = 5 + 5 = 10.

Laisser une réponse