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++
|
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)
|
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
|