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