35

Les Pointeurs

En langage C, il est possible de définir une variable destinée à contenir une adresse. On pourrait dire qu'une telle variable est de type pointeur. En fait, ceci n'est pas assez précis, car le langage C distingue plusieurs types de pointeurs en se basant sur le type des informations qu'on trouvera à l'adresse indiquée : caractères, entiers, décimaux ...


La déclaration d'une variable pointeur

Syntaxe :

C'est ainsi qu'on déclare une variable de type pointeur, il s'agit en fait de la déclaration d'une variable nommée nom_du_pointeur, destinée à contenir l'adresse d'un élément de type type.

Exemples :


Le symbole &

Le symbole & placé devant le nom d'une variable permet d'utiliser l'adresse de cette variable, plutôt que son contenu.

Exemple :

L'exécution de la dernière instruction, va affecter à adr_i l'adresse de notre variable n. On dit alors que adr_i pointe sur n.


Le symbole *

Le symbole * permet lorsqu'il est placé devant un nom de pointeur, d'utiliser la variable pointée. Cette opérateur peut donc permettre soit de récupérer la valeur contenue dans la variable pointée, soit de modifier le contenu de cette variable pointée.

Exemple :

Si adr_i=&n, alors *adr_i peut être considérée comme étant la variable n. Toutes les opérations sur n peuvent être faites en utilisant *adr_i.


Quelques précautions

a) Lorsqu'on souhaite déclarer, dans une même instruction, plusieurs pointeurs de même type, il ne faut pas écrire :

Exemple mauvais :

En effet, dans ce cas adc1 serait certes un pointeur sur des caractères, mais en revanche, adc2 serait tout simplement de type char. Si l'on souhaite que adc2 soit également de type pointeur sur des caractères, il faudra écrire :

Exemple correct :

b) Lorsqu'on réserve l'emplacement pour une variable pointeur, on ne réserve pas pour autant un emplacement pour un entier. L'adresse contenue initialement dans la variable pointeur, est imprévisible.

Exemple mauvais :

On introduit ici une affectation sur la variable qui serait pointée par adi, alors que nous n'avons fait pointer aucune variable par adi. Nous avons en fait demandé de placer la valeur 12 à un emplacement inconnu.

c) Lorsqu'on manipule les pointeurs, il faut faire attention au moment des affectations.

Exemple :

d) Il n'est pas permis d'affecter la valeur d'un pointeur d'un certain type à une variable pointeur d'un type différent.

Exemple mauvais :