![]()
Pointeurs et opérateurs additifs ![]()
![]()
![]()
![]()
![]()
Suivant: Différence de deux pointeurs Début: Les pointeurs Précédent: Exercice
Paragraphes
Pointeurs et opérateurs additifs
Opérateurs + et -
L'opérateur + permet de réaliser la somme de deux valeurs arithmétiques, mais il permet également de réaliser la somme d'un pointeur et d'un entier. Une telle opération n'a de sens cependant, que si le pointeur repère un élément d'un tableau.Soient p une valeur pointeur vers des objets de type T et un tableau dont les éléments sont du même type T ; si p repère l'élément d'indice i du tableau, p + j est une valeur de type pointeur vers T, qui repère l'élément d'indice i + j du tableau (en supposant qu'il existe).
Il en va de même avec l'opérateur soustraction : si p repère l'élément d'indice i d'un tableau, p - j repère l'élément d'indice i - j du tableau (toujours en supposant qu'il existe). Exemple :
#define N 10 int t[N]; int *p,*q,*r,*s; p = &t[0]; /* p repère le premier élément de t */ q = p + (N-1); /* q repère le dernier élément de t */ r = &t[N-1]; /* r repère le dernier élément de t */ s = r - (N-1); /* s repère le premier élément de t */La norme précise que pour réaliser la somme ou la différence d'un pointeur et d'un entier, il faut qu'à la fois le pointeur et le résultat repèrent les éléments d'un même tableau ou l'élément (fictif) après le dernier élément du tableau. En d'autre termes, si on a :
#define N 100 int t[N]; int * p = &t[0];L'expressionp + N
est valide, maisp - 1
oup + N + 1
ne sont pas valides. La licence concernant l'élément juste après le dernier élément a été introduite pour les problèmes de fin de boucle de parcours de tableau (mais on aurait pu s'en passer).Opérateurs ++ et -
On peut appliquer les opérateurs ++ et - à des pointeurs et il est classique de les utiliser pour réaliser des parcours de tableaux. Exemple (on rappelle que toute chaîne est terminée par un null, c'est à dire le caractère'\0'
) :char mess[] = "Hello world!!"; char *p; for (p = &mess[0]; *p != '\0'; p++) { /* ici p repère l'élément courant de mess */ }Autre classique, en reprenant les variables
mess
etp
de l'exemple précédent :p = &mess[0]; while (*p != '\0') { /* ici utilisation de *p++ */ }
30/9/1997