C: pointeurs

Déclaration d'un pointeur
Un pointeur est une variable qui doit être définie en précisant le type de variable pointée, de la façon suivante : type * Nom_du_pointeur Le type de variable pointée peut être aussi bien un type primaire (tel que int, char...) qu'un type complexe (tel que struct...).

Un pointeur doit préférentiellement être typé ! Il est toutefois possible de définir un pointeur sur 'void', c'est-à-dire sur quelque chose qui n'a pas de type prédéfini (void * toto). Ce genre de pointeur sert généralement de pointeur de transition, dans une fonction générique, avant un transtypage permettant d'accéder effectivement aux données pointées. Grâce au symbole '*' le compilateur sait qu'il s'agit d'une variable de type pointeur et non d'une variable ordinaire, de plus, étant donné que vous précisez (obligatoirement) le type de variable, le compilateur saura combien de blocs suivent le bloc situé à l'adresse pointée.

Initialisation d'un pointeur
Après avoir déclaré un pointeur il faut l'initialiser. Cette démarche est très importante car lorsque vous déclarez un pointeur, celui-ci contient ce que la case où il est stocké contenait avant, c'est-à-dire n'importe quel nombre. Autrement dit, si vous n'initialisez pas votre pointeur, celui-ci risque de pointer vers une zone hasardeuse de votre mémoire, ce qui peut être un morceau de votre programme ou... de votre système d'exploitation !

Un pointeur non initialisé représente un danger !

Pour initialiser un pointeur, il faut utiliser l'opérateur d'affectation '=' suivi de l'opérateur d'adresse '&' auquel est accollé un nom de variable (celle-ci doit bien sûr avoir été définie avant...) : Nom_du_pointeur = &nom_de_la_variable_pointee; Par exemple : int a = 2; char b; int *p1; char *p2; p1 = &a; p2 = &b;

Accéder à une variable pointée
Après (et seulement après) avoir déclaré et initialisé un pointeur, il est possible d'accéder au contenu de l'adresse mémoire pointée par le pointeur grâce à l'opérateur '*'. La syntaxe est la suivante :

Par exemple : int a = 2; *p1 = 10; *p2 = 'a'; Après ces deux instructions, le contenu des variables a et b sera respectivement 10 et 97 (61 en hexadécimal, le code ASCII associé au caractère 'a').

Si vous désirez utiliser cette notation dans une expression plus complexe, il sera nécessaire d'employer des parenthèses :

Par exemple :