Arithmétique des pointeurs

Opérations sur les pointeurs

Nous avons vu qu'un pointeur pouvait être affecté et comparé. Il est également possible d'ajouter ou retrancher une valeur à un pointeur. Le pointeur étant « in fine » une adresse mémoire, les valeurs qu'il est possible d'utiliser pour cette opération sont les entiers.

Nous pouvons également utiliser l'opérateur - entre 2 pointeurs. Dans ce cas, le retour sera un entier précisant un « offset » ou décalage entre les 2 pointeurs.

Fondamental

Les opérateurs sur les pointeurs sont « génériques » et leur traduction dépend du type de la valeur pointée.

Soit le pointeur de caractère ptChar de valeur 100000 (notez que cette adresse est fictive). Il y a, à cette adresse, un caractère. Si ce dernier est intégré à un tableau de caractères, nous pouvons accéder au caractère suivant en réalisant l'incrémentation du pointeur ou en utilisant une expression :

*(++ptChar) permettra d'accéder au caractère suivant, tout comme *(ptChar+1).

Supposons maintenant que cette adresse soit le contenu d'un pointeur d'entier ptInt. L'accès à l'entier suivant est exprimé de la même façon, soit *(++ptInt).

Toutefois, un entier a une taille de 4 octets, alors qu'un caractère standard aura une taille de 1 octet. Donc pour passer à l'élément suivant, le calcul de l'adresse du suivant sera dans un cas 10000+1 et dans l'autre 100000+4.

Dans l'absolu, une même expression est évaluée « pointeur+1*sizeof(T) ».