Previous Next Up Index Contents

9.2.2. Les opérations élémentaires sur pointeurs


En travaillant avec des pointeurs, nous devons observer les règles suivantes:

Priorité de

* et &

* Les opérateurs * et & ont la même priorité que les autres opérateurs unaires (la négation !, l'incrémentation ++, la décrémentation --). Dans une même expression, les opérateurs unaires *, &, !, ++, -- sont évalués de droite à gauche.

* Si un pointeur P pointe sur une variable X, alors *P peut être utilisé partout où on peut écrire X.

Exemple

Après l'instruction

   P = &X;

les expressions suivantes, sont équivalentes:


Y = *P+1


Y = X+1

*P = *P+10

X = X+10

*P += 2

X += 2

++*P

++X

(*P)++

X++

Attention!

Dans le dernier cas, les parenthèses sont nécessaires:

Comme les opérateurs unaires * et ++ sont évalués de droite à gauche, sans les parenthèses le pointeur P serait incrémenté, non pas l'objet sur lequel P pointe.

On peut uniquement affecter des adresses à un pointeur.

Le pointeur NUL

Seule exception: La valeur numérique 0 (zéro) est utilisée pour indiquer qu'un pointeur ne pointe 'nulle part'.

      int *P;
      P = 0;

Finalement, les pointeurs sont aussi des variables et peuvent être utilisés comme telles. Soit P1 et P2 deux pointeurs sur int, alors l'affectation

         P1 = P2;

copie le contenu de P2 vers P1. P1 pointe alors sur le même objet que P2.

Résumons:

Après les instructions:

   int A;
   int *P;
   P = &A;

A

désigne le contenu de A
&A
désigne l'adresse de A


P
désigne l'adresse de A
*P
désigne le contenu de A

En outre:

&P

désigne l'adresse du pointeur P
*A
est illégal (puisque A n'est pas un pointeur)


Exercice 9.1


   main()
   {
      int A = 1;
      int B = 2;
      int C = 3;
      int *P1, *P2;
      P1=&A;
      P2=&C;
      *P1=(*P2)++;
      P1=P2;
      P2=&B;
      *P1-=*P2;
      ++*P2;
      *P1*=*P2;
      A=++*P2**P1;
      P1=&A;
      *P2=*P1/=*P2;
      return 0;
   }

Copiez le tableau suivant et complétez-le pour chaque instruction du programme ci-dessus.

A

B
C
P1
P2
Init.
1
2
3
/
/
P1=&A
1
2
3
&A
/
P2=&C





*P1=(*P2)++





P1=P2





P2=&B





*P1-=*P2





++*P2





*P1*=*P2





A=++*P2**P1





P1=&A





*P2=*P1/=*P2






Previous Next Up Index Contents


Feedback - Copyright © 1993,1996,1997 F.Faber