Mais que faire de ce pointeur ? Le pointeur sert à mémoriser l’adresse, (l’emplacement mémoire) d’une autre variable. 
Les utilisations sont multiples et la suite du chapitre vous proposera deux applications des pointeurs : listes chaînées 
et arbres binaires. En attendant, depuis un pointeur vous pouvez aussi accéder au contenu de la variable pointée. Il 
suffit  tant  à  l’affichage  qu’à  l’affectation  de  rajouter  une  étoile  "*"  avant  son  nom.  Que  provoque  en  C  la  ligne 
suivante ? 
printf("Contenu de la variable pointée via *p_i: %d\n",*p_i);
L’affichage du contenu présent à l’adresse pointée, donc le contenu de la variable pointée : 
Contenu de la variable pointée via *p_i: 123456
Le fait d’accéder au contenu de la variable pointée s’appelle déréférencer un pointeur. 
Avec ce système, il est possible de manipuler les variables et les pointeurs dans tous les sens. Si vous modifiez le 
contenu  de  la  variable  pointée,  l’adresse  du  pointeur  n’est  pas  modifiée,  mais  son  déréférencement  affichera  la 
nouvelle valeur. Réciproquement, vous pouvez modifier la valeur de la variable pointée en passant par son pointeur 
avec l’étoile devant. 
/* modification de la valeur de la variable pointée par p_i */
*p_i=987654;
printf("i contient maintenant %d\n",i);
Le résultat est que vous venez de modifier le contenu de la zone mémoire à l’adresse pointée par p_i, qui est celle de 
i. Vous venez donc de modifier la valeur de i en passant par un pointeur. 
i contient maintenant 987654
c. Applications 
Les applications sont nombreuses : 
q En  C  une  fonction  ne  sait  pas  retourner  directement  un  tableau  ou  un  enregistrement  structuré.  Elle  doit 
retourner l’adresse de celle­ci, et donc son résultat sera placé dans un pointeur adéquat. 
q Dans le chapitre sur les sous­programmes, vous avez vu qu’il est possible de passer une variable en Sortie 
(S) ou Entrée/Sortie (ES) à une procédure. D’après vous, quel est le mécanisme utilisé ? Le pointeur, bien 
entendu : vous passez l’adresse de la variable en paramètre, et le sous­programme va modifier le contenu de 
la mémoire à cette adresse via un pointeur. 
q Les pointeurs ouvrent la voie à l’utilisation de mécanismes complexes. Notamment, vous pouvez créer une 
liste  d’enregistrements  ordonnés  :  un  enregistrement  contient  une  valeur,  puis  un  pointeur  vers 
l’enregistrement suivant, et ainsi de suite… 
q Dans  un  langage  bas  niveau  comme  le  C,  les  tableaux  se  manipulent  très  facilement  via  des  pointeurs, 
puisqu’il est possible de faire des calculs sur les adresses : +1 va au contenu de l’adresse suivante, et ainsi 
de suite. 
Voici un simple exemple en C d’une fonction qui doit modifier le contenu d’une variable en passant tout d’abord par 
une valeur de retour, puis par un pointeur. 
La première fonction est très classique et ressemble beaucoup à ce qui existe en Java. 
long modif(long var,long n)
{
var=n;
return var;
}
Elle s’utilise ainsi et n’amène pas de remarque particulière : 
i=modif(i,1000);
printf("i contient maintenant %d\n",i);
La seconde fonction est modifiée pour prendre une adresse en paramètre : 
- 4 -
© ENI Editions - All rigths reserved - Jonifar lina
166
Précédent

- 166/220

Suivant