La manipulation des pointeurs
Type pointeur et pointeur NULL
Comme toute variable d'un programme en C, un pointeur doit être déclaré avant de pouvoir être utilisé. La déclaration d'un pointeur doit préciser quel type de donnée il va pointer. L'exemple ci-dessous permet de déclarer un pointeur sur un type int :
int *pointeur ;
On remarque l'utilisation du symbole * qui définit un pointeur. Attention ! Il ne faut pas le confondre avec l'opérateur * de la multiplication. C'est le contexte qui permet de déterminer la signification de l'opérateur.
Après la déclaration de la variable pointeur, cette dernière contient une adresse en mémoire. Ici, la variable pointeur n'a pas été initialisée, donc elle contient une valeur pseudo-aléatoire, ce qui est dangereux. C'est pourquoi une valeur constante particulière a été définie pour les variables de type pointeur : la valeur NULL. Lorsqu'un pointeur contient la valeur NULL, cela signifie qu'il ne pointe aucune variable en mémoire.
Une bonne pratique est d'initialiser les variables de type pointeur dès leur déclaration. S'il n'y a aucune adresse utile à affecter, on utilisera la constante NULL. Ainsi, un test sur la valeur NULL indiquera que le pointeur contient une adresse ou non.
Remarque : Le pointeur est-il une variable comme une autre ?
Un pointeur étant une variable, le compilateur lui a affecté une adresse comme toute variable. Il peut donc être référencé par un autre pointeur.
Nous avons rencontré ce cas très tôt dans les paramètres de la fonction main. Ainsi, la déclaration main(int arc, char **argv) précise que le 2e paramètre est un pointeur référençant un pointeur de caractère.