Pointeurs langage c
[pic]
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 |[pic|Y = X+1 |
| | |] | |
| |*P = *P+10 |[pic|X = X+10 |
| | |] | |
| |*P += 2 |[pic|X += 2 |
| | |] | |
| |++*P |[pic|++X |
| | |] | |
| |(*P)++ |[pic|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'.
[pic]
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:
[pic]
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