Programmation C · 3 min read · Nov 15, 2025

Tutoriel de programmation C sous Linux Partie 20 - Arithmétique des adresses de pointeur

Dans notre précédent tutoriel de cette série de programmation C, nous avons discuté des pointeurs en détail. Pour prolonger cette discussion, nous avons ici quelques concepts supplémentaires dignes d’intérêt liés aux pointeurs. Alors sans plus tarder, commençons.

Arithmétique des adresses de pointeur en C

Tout d’abord, concentrons-nous sur l’arithmétique des adresses lors de la manipulation des pointeurs. Comme nous l’avons discuté dans notre précédent tutoriel, si vous avez un pointeur pointant vers un tableau (disons le début de celui-ci), il est très facile d’accéder aux éléments de ce tableau. Voici un exemple :

#include   
  
int main()  
{  
    char arr[]={'a','b','c','d'};  
    int a[]={1,2,3,4};  
   
    char *ptr = arr;  
    int *p = a;  
   
    for(int i=0; i

Donc dans ce code, nous avons deux tableaux - ‘arr’ et ‘a’. Alors que le premier est un tableau de caractères, le second est un tableau d’entiers. Ensuite, nous avons deux pointeurs pointant vers ces tableaux - ‘ptr’ et ‘p’, respectivement. Ensuite, il y a quelques boucles ‘for’ où nous imprimons l’adresse actuelle à laquelle le pointeur pointe et la valeur contenue à cette adresse.

Voici la sortie de ce code sur ma machine :

 Pointeur de caractère pointant vers 726409312, avec la valeur a   
 Pointeur de caractère pointant vers 726409313, avec la valeur b   
 Pointeur de caractère pointant vers 726409314, avec la valeur c   
 Pointeur de caractère pointant vers 726409315, avec la valeur d   
 Pointeur d'entier pointant vers 726409296, avec la valeur 1   
 Pointeur d'entier pointant vers 726409300, avec la valeur 2   
 Pointeur d'entier pointant vers 726409304, avec la valeur 3   
 Pointeur d'entier pointant vers 726409308, avec la valeur 4

Maintenant, ce qui est remarquable ici, ce sont les adresses imprimées dans la sortie. Pour le tableau de caractères, ajouter ‘1’ au pointeur l’a incrémenté à l’adresse suivante, mais pour un tableau d’entiers, ajouter ‘1’ au pointeur l’a fait sauter 4 adresses en avant. Pourquoi est-ce ainsi ?

Eh bien, tout dépend du type de pointeur. Un pointeur de caractère saute toujours le nombre d’octets qu’un caractère occupe, qui est généralement 1. De même, un pointeur vers un entier saute généralement 4 octets lorsqu’il est incrémenté de 1. Cela devrait expliquer la différence dans les sauts de pointeur de caractère et d’entier dans la sortie ci-dessus.

En continuant avec l’arithmétique des pointeurs, les pointeurs peuvent être utilisés dans des expressions de comparaison dans certains cas. Par exemple, si vous voulez confirmer si un pointeur ‘ptr’ pointe vers un élément d’un tableau ‘arr’ (de taille ‘size’), alors vous pouvez faire la comparaison de la manière suivante :

if((ptr >= arr) && (ptr < (arr + size))) 

Ainsi, l’expression ci-dessus vérifie si l’adresse détenue par le pointeur est celle de l’un de ses éléments.

De plus, s’il y a plusieurs pointeurs pointant vers des éléments du même tableau, vous pouvez utiliser les opérateurs de comparaison suivants ==, !=, <, et >=. En fait, vous pouvez également effectuer une soustraction de pointeur dans ces cas. Voici un exemple :

#include   
  
int main()  
{  
    char arr[]= "Bienvenue sur HowtoForge";  
   
    char *ptr = arr;  
    char *p = arr;  
   
    while(*p != '\0')  
   {  
      p++;  
   }  
   
   printf("\n La longueur de la chaîne est %d", (p - ptr));  
   
   return 0;  
}

Donc dans ce programme, nous avons veillé à ce qu’un pointeur pointe vers le premier élément du tableau, tandis que le second pointeur est continuellement incrémenté jusqu’à ce qu’il pointe vers le dernier élément (qui est ‘\0’ dans les chaînes constantes).

Ensuite, étant donné que nous traitons des caractères ici (qui occupent un octet chacun), en soustrayant l’adresse pointée par le premier pointeur de celle pointée par le second pointeur, nous pourrions trouver le nombre de caractères, qui si vous regardez est la longueur exacte de la chaîne.

REMARQUE : Gardez à l’esprit que des opérations comme l’addition, la multiplication, la division, et plus sont invalides en ce qui concerne les pointeurs. De plus, le type d’opérations acceptables que nous avons listées jusqu’à présent n’est également valide que lorsque les pointeurs sont du même type et pointent vers des éléments du même tableau.

Conclusion

Après avoir discuté des concepts de base des pointeurs dans le précédent tutoriel, nous avons approfondi le concept des pointeurs en discutant de l’arithmétique des adresses de pointeur ici. Nous vous suggérons de pratiquer tout ce que nous avons discuté ici sur votre machine sous forme de programmes. Et en cas de doute ou de question, n’hésitez pas à laisser un commentaire ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.