11. Pointeurs Le mémoire central des ordinateurs est découpé logiquement en octets. Chacun de ces octets possède une adresse unique, un nombre entier qui sert à l’identifier. Chaque octet de mémoire peut stocker une donnée du type caractère (char). Pour d'autres types de données plusieurs octets consécutifs doivent être utilisés. Par exemple, pour une donnée du type double on doit utiliser 8 octets. L'adresse de la zone de mémoire correspondant à un objet du type double est par convention l'adresse du premier octet, dans l'ordre des adresses croissantes, de cette zone. Les pointeurs donnent un moyen alternatif d’accéder au mémoire. Ils sont variables qui peuvent contenir seulement des adresses du mémoire. En fait, un pointeur est simplement un entier, mais pour des raisons de sécurité, on prend soin de distanguer pointeurs et entiers, ainsi que les différents types de pointeurs entre eux. Ainsi, un pointeur de flottant en double précision /adresse d’un objet de type double/ et un pointeur de caractère /adresse d’un objet de type char/ sont de types différents. • Définition d’un pointeur Définition d’une variable pointeur: type * variable_pointeur; Dans cette définition on doit écrire * /étoile/ avant chaque variable pointeur, par exemple: double * ptr1; int * p1, *p2; Dans l’exemple ci-dessus p1 et p2 peuvent prendre seulement des adresses des valeurs du type int. On dit encore que p1 et p2 pointent sur des objets du type int. ptr1 point sur des objets du type double. • Opérateurs utilisés avec des pointeurs Les opérateurs unaires & et * peuvent être appliqués à des pointeurs. L’opérateur & : &opérande L’opérande est obligatoirement une variable. L’opérateur & retourne l’adresse de la variable. L’opérateur * : * opérande L’opérande peut être uniquement un pointeur ou une expression dans laquelle il y a des pointeurs. Exemple: - Si V est une variable, *&V et V ont le même sens; - L’opérateur * peut signifier aussi la multiplication. Le sens concret est déterminé par le contexte; - Comme toutes les variables chaque pointeur doit être initialisé avant d’être utilisé. Le pointeur NULL est un pointeur qui ne pointe rien.Il peut être utilisé pour l'initialisation d'un pointeur. Exemples: Exemple: Exemple: int *ptr, x=5; ptr =&x ; cout<<&ptr ; Les opérateurs + et – sont utilisés par le moyen pareil:: |