Opérations arithmétiques et pointeurs

De RAD Studio
Aller à : navigation, rechercher

Remonter à Pointeurs - Index

Les opérations arithmétiques sur les pointeurs sont l'addition, la soustraction et la comparaison. Les opérations arithmétiques lorsqu'elles sont effectuées sur des pointeurs d'objets de type "pointeur sur type" prennent automatiquement en compte la taille de type, c'est-à-dire le nombre d'octets nécessaires pour stocker un objet type.

Les calculs arithmétiques internes exécutés sur les pointeurs dépendent du modèle mémoire et des éventuels modificateurs de pointeurs.

Les opérations arithmétiques sur les pointeurs supposent que les pointeurs en question pointent sur des tableaux d'objets. Ainsi, si un pointeur pointe sur type, l'addition d'une valeur entière à ce pointeur le fait avancer du même nombre d'objets du type considéré. Si type a une taille de 10 octets et si on ajoute 5 à un pointeur sur type, le pointeur avance de 50 octets en mémoire. La soustraction correspond au nombre d'éléments du tableau qui séparent les deux opérandes. Par exemple, si ptr1 pointe sur le troisième élément d'un tableau, et ptr2 sur le dixième, le résultat de ptr2 - ptr1 sera 7.

La soustraction entre deux pointeurs n'a de sens que si les deux pointent sur les données d'un même tableau.

Lorsqu'un entier est ajouté à un "pointeur sur type", ou soustrait de celui-ci, le résultat est également de type "pointeur sur type".

Il n'existe pas d'élément tel que "pointeur sur le dernier élément plus un", mais un pointeur peut prendre une telle valeur. Si P pointe sur le dernier élément d'un tableau, P+1 est légal, mais P+2 est non défini. Si P pointe sur le dernier élément plus un, P-1 est légal, et on obtient un pointeur sur le dernier élément. Cependant, le fait d'appliquer l'opérateur d'indirection * à un "pointeur du dernier élément plus un" aboutit à un comportement non défini.

On peut dire que P + n fait avancer le pointeur de (n * sizeof(type)) octets, dès lors que le pointeur reste dans la fourchette de valeurs permises (jusqu'au premier élément qui suit le dernier).

La soustraction de deux pointeurs d'éléments du même objet tableau donne une valeur entière de type ptrdiff_t définie dans stddef.h. Cette valeur représente la différence entre les deux indices des éléments référencés, à condition qu'elle soit comprise dans la fourchette de ptrdiff_t. Dans l'expression P1-P2, où P1 et P2 sont du type pointeur sur type (ou pointeur sur type qualifié), P1 et P2 doivent pointer sur des éléments existants ou sur le dernier élément plus un. Si P1 pointe sur l'élément i et P2 sur j, P1-P2 aura la valeur (i-j).