Arithmétique des pointeurs en C ++

Un pointeur est une adresse numérique; Donc, vous pouvez effectuer des opérations arithmétiques sur un pointeur et il existe quatre opérateurs arithmétiques qui peuvent être utilisés sur les pointeurs: ++, -, + et –

Pour comprendre l’arithmétique du pointeur, considérons que p est un pointeur entier(de type int) qui pointe vers l’adresse 1000. En supposant des entiers de 32 bits, effectuons l’opération arithmétique suivante sur le pointeur:

p++

Le pointeur p pointera vers l’emplacement 1004 parce que chaque fois que ptr est incrémenté, il pointe vers l’entier suivant. Cette opération déplacera le pointeur vers l’emplacement mémoire suivant sans affecter la valeur qui dans l’emplacement mémoire. Si p pointe vers un caractère dont l’adresse est 1000, l’opération ci-dessus pointe vers l’emplacement 1001 car le caractère suivant sera disponible à 1001.
 
 

Incrémenter un pointeur

Nous préférons utiliser un pointeur dans notre programme au lieu d’un tableau car le pointeur peut être incrémenté, contrairement au nom du tableau qui ne peut être incrémenté car il s’agit d’un pointeur constant. Le programme suivant incrémente le pointeur pour accéder à chaque élément successif du tableau:

#include <iostream>

using namespace std;
const int MAX = 3;

int main () {
   int  v[MAX] = {33, 333, 2019};
   int  *p;

   // stocker l'adresse du tableau v dans le pointeur p.
   p = v;
 
   for (int i = 0; i < MAX; i++) {
      cout << "Adresse de v [" << i << "] = ";
      cout << p << endl;

      cout << "Valeur de v[" << i << "] = ";
      cout << *p << endl;

      // p pointe vers l'emplacement suivant
      p++;
   }
 
   return 0;
}

La sortie :

Adresse de v [0] = 0x7fff819521e0
Valeur de v[0] = 33
Adresse de v [1] = 0x7fff819521e4
Valeur de v[1] = 333
Adresse de v [2] = 0x7fff819521e8
Valeur de v[2] = 2019

 

Décrémenter un pointeur:

C’est comme l’incrémentation sauf la valeur du pointeur sera diminue par le nombre d’octets de son type de données comme indiqué ci-dessous:

#include <iostream>

using namespace std;
const int MAX = 3;

int main () {
   int  v[MAX] = {33, 333, 2019};
   int  *p;

   // nous avons l'adresse du dernier élément du pointeur.
   p = &v[MAX-1];
 
   for (int i = MAX; i > 0; i--) {
      cout << "Adresse de v [" << i << "] = ";
      cout << p << endl;

      cout << "Valeur de v[" << i << "] = ";
      cout << *p << endl;

      // p pointe vers l'emplacement précédent
      p--;
   }
 
   return 0;
}

La sortie :

Adresse de v [3] = 0x7ffe8d9161f8
Valeur de v[3] = 2019
Adresse de v [2] = 0x7ffe8d9161f4
Valeur de v[2] = 333
Adresse de v [1] = 0x7ffe8d9161f0
Valeur de v[1] = 33

 
 

Comparaisons de pointeurs

Les pointeurs peuvent être comparés en utilisant des opérateurs relationnels, tels que ==, <, et >. Si p1 et p2 désignent des variables qui sont liées les unes aux autres, telles que des éléments d’une même matrice, alors p1 et p2 peuvent être significativement comparés.

Le programme suivant modifie l’exemple précédent en incrémentant le pointeur tant que l’adresse à laquelle il pointe est inférieure ou égale à l’adresse du dernier élément du tableau, qui est &v [MAX-1]:

#include <iostream>

using namespace std;
const int MAX = 3;

int main () {
   int  v[MAX] = {33, 333, 2019};
   int  *p;

   // nous avons l'adresse du premier élément dans le pointeur.
   p = v;
   int i = 0;
 
   while ( p <= &v[MAX - 1] ) {
      cout << "Adresse de v[" << i << "] = ";
      cout << p << endl;

      cout << "Valeur de v[" << i << "] = ";
      cout << *p << endl;

      // pointe vers l'emplacement précédent
      p++;
      i++;
   }
 
   return 0;
} 

La sortie :

Adresse de v[0] = 0x7ffce5541ac0
Valeur de v[0] = 33
Adresse de v[1] = 0x7ffce5541ac4
Valeur de v[1] = 333
Adresse de v[2] = 0x7ffce5541ac8
Valeur de v[2] = 2019

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.