Deux opérateurs méritent un paragraphe spécial. Il sagit de lopérateur dincrémentation ++
et de celui de décrémentation --
. Ces opérateurs unaires peuvent agir sur une variable entière (y compris caractère) ou décimale, ainsi que sur les pointeurs comme on le verra, et ont deux effets groupés. La variable est en effet augmentée de 1 (incrémentation) ou diminuée (décrémentation) de 1, tandis que la valeur renvoyée est soit lancienne valeur de la variable (post-incrémentation ou post-décrémentation), soit la nouvelle (pré-incrémentation et pré-décrémentation).
Étudions cela sur un exemple :
int i = 4;int u = i++;int v = i--;int w = --u;int t = ++v;
À lissue de ces initialisations, que valent les différentes variables ? Il suffit de regarder pas à pas. Au départ, i
vaut 4. Lécriture u = i++
est une post-incrémentation (++
est derrière la variable i
à laquelle il sapplique) qui a deux effets. Dabord, la valeur de i
, soit 4, est recopiée dans u
; puis la variable i
est incrémentée. À lissue de cette seconde ligne, u
vaut donc 4 et i
5. La troisième ligne est semblable, mais cette fois i
est décrémenté après avoir été copié dans v
; donc i
vaut alors 4 et v
5.
Dans la quatrième ligne, on a une pré-décrémentation. Par conséquent, u
est dabord décrémenté, prenant ainsi la valeur 3, puis cette valeur est recopiée dans w
. Dans la dernière ligne, on a une pré-incrémentation ; v
est donc incrémenté, prenant la valeur 6, et recopié dans t
.
À lissue de lensemble, i
vaut 4, u
3, v
6, w
3, t
6. Si cela ne vous paraissait pas évident au premier abord, cest normal !
Ces deux opérateurs sont parfois très pratiques comme raccourcis décriture. En outre, ils correspondent à des opérations très naturelles et donc très rapides du processeur. Cependant, il est évident quils diminuent la lisibilité des programmes.
On prendra garde de ne pas tenter de les appliquer à des expressions qui ne représentent pas des variables. Ainsi, lexpression :
u = (i + j)++;
est refusée par le compilateur (Error : Lvalue required), tandis que celle-ci :
u = i + j++;
est correcte, car lopérateur dincrémentation est prioritaire. Ici, u
prend la valeur de la somme i+j
, puis j
est incrémenté.
Exercice 2.4 | Après la séquence dinstructions suivantes, combien valent les variables ? int i = 10, j = 3;float f = i/j;j = 10-f++*--i; |
Voir solution |
Précédent | Sommaire | Suivant |