Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :

next up previous contents index
Next: Différence de deux pointeurs Up: Les pointeurs Previous: Exercice

Sous-sections

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'expression p + N est valide, mais p - 1 ou p + N + 1 ne sont pas valides. La possibilité de référencer l'élément (fictif) après le dernier élément d'un tableau 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 et p de l'exemple précédent :

p = &mess[0];
while (*p != '\0')
   {
   /*   ici utilisation de *p++   */
   }


next up previous contents index
Next: Différence de deux pointeurs Up: Les pointeurs Previous: Exercice
Bernard Cassagne
1998-12-09
Contacter le responsable de la rubrique C