Quelle est la différence entre pré et post incrémentation en langage C ? Faut-il écrire i++ ou ++i ? Quelle différence entre les deux ? C'est à ces questions qu'on va répondre dans ce tuto !
Rappel : incrémentation et affectation
L'incrémentation (respectivement la décrémentation) est le fait d'ajouter (respectivement de soustraire) une certaine valeur à la valeur déjà existante d'une variable. Ainsi, si on fait : x = x+5; on rajoute à la valeur de x la valeur 5. L'incrémentation (respectivement la décrémentation) par 1 peut se faire simplement à l'aide de l'opérateur unaire ++ (respectivement --). Et cet opérateur peut se placer avant (++exp) ou après (exp++) une expression exp. En suivant des cours pour apprendre le langage C, vous pouvez confondre entre ces deux cas de figure qu'on appelle des opérations de post-incrémentation et pré-incrémentation.
Avant d'expliquer la différence entre exp++ et ++exp, il faut noter que contrairement aux autres langages de programmation, le langage C considère l'affectation comme une expression, on peut ainsi utiliser des affectations multiples du genre : a = b = c = 5; ou en plus compliqué : x=y/=x;
Remarque: ce qui suit est valable pour l'incrémentation avec l'opérateur ++ et la décrémentation avec l'opérateur --
Quelle différence entre i++ et ++i ?
Comme je l'ai précisé : i++ est appelée opération de post-incrémentation, alors que ++i est appelée opération de pré-incrémentation.
Les deux opérations sont différentes et ça peut parfois prêter à confusion surtout lorsqu'on débute en C.
Soit une variable i de type entier initialisée à 2: int i = 2;
Si on écrit les instructions : i++; et ++i; et on affiche la valeur de i, nous aurons la même valeur retournée par les 2 instructions (dans ce cas: i = 2+1 = 3), alors que la position de l'opérateur ++ compte.
Prenons un autre exemple, pour bien cerner la différence. Soit le programme suivant:
Focalisons nous sur les 2 instructions (5) et (10):
- (5) j = i++;
- (10) j = ++i;
En ajoutant le même affichage printf("i = %d , j= %d", i, j); après chacune des instructions, on doit obtenir le résultat suivant :
L'affichage après l'instruction (5) donne : i = 3 , j = 2, L'affichage après l'instruction (10) donne : i = 3 , j = 3
Là on remarque bien une grande différence entre les deux résultats ! Pourquoi ?
Explications :
- Cas de l'instruction (5) : j = i++;
L'opérateur ++ se place après la variable à incrémenter i, ainsi (1) peut être traduite en : incrémenter la valeur de i, mais retourne la valeur originale de i avant incrémentation, donc:
- i sera incrémenté de 1 (i = 2+1), sa valeur devient 3
- j sera affecté à l'ancienne valeur de i (sa valeur avant incrémentation), sa valeur devient 2
- Cas de l'instruction (10) : j = ++i;
L'opérateur ++ se place avant la variable à incrémenter i, ainsi (2) peut être traduite en : incrémenter la valeur de i, et retourne la nouvelle valeur de i après incrémentation, donc:
- i sera incrémenté de 1 (i = 2+1), sa valeur devient 3
- j sera affecté à la nouvelle valeur de i (sa valeur après incrémentation), sa valeur devient 3
Pour résumer :
- j = i++ ; est équivalente à : j = i ; i = i + 1 ;
- j = ++i ; est équivalente à : i = i + 1 ; j = i ;
- j = i--; est équivalente à : j = i ; i = i - 1 ;
- j = --i ; est équivalente à : i = i - 1 ; j = i ;
No Response to "La pré et post incrémentation en langage C: quelle différence entre i++ et ++i ?"
Enregistrer un commentaire