Pointeurs C ++ vs tableaux

Les pointeurs et les tableaux sont étroitement liés. En fait, les pointeurs et les tableaux sont interchangeables dans de nombreux cas. Par exemple, un pointeur qui pointe vers le début d'un tableau peut accéder à ce tableau en utilisant l'arithmétique du pointeur ou l'indexation de style tableau. Considérez le programme suivant -

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main () {
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
 
   // let us have array address in pointer.
   ptr = var;
   
   for (int i = 0; i < MAX; i++) {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
 
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
 
      // point to the next location
      ptr++;
   }
   
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit un résultat comme suit -

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

Cependant, les pointeurs et les tableaux ne sont pas complètement interchangeables. Par exemple, considérons le programme suivant -

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main () {
   int  var[MAX] = {10, 100, 200};
 
   for (int i = 0; i < MAX; i++) {
      *var = i;    // This is a correct syntax
      var++;       // This is incorrect.
   }
   
   return 0;
}

Il est parfaitement acceptable d'appliquer l'opérateur pointeur * à var mais il est illégal de modifier la valeur de var. La raison en est que var est une constante qui pointe vers le début d'un tableau et ne peut pas être utilisée comme valeur l.

Étant donné qu'un nom de tableau génère une constante de pointeur, il peut toujours être utilisé dans des expressions de style pointeur, tant qu'il n'est pas modifié. Par exemple, ce qui suit est une instruction valide qui attribue à var [2] la valeur 500 -

*(var + 2) = 500;

L'instruction ci-dessus est valide et sera compilée avec succès car var n'est pas modifiée.