Latest web development tutorials

C ++ pointeurs vs tableau

C ++ pointeurs C ++ pointeurs

Pointeurs et tableaux sont étroitement liés. En fait, les pointeurs et les tableaux dans de nombreux cas, sont interchangeables. Par exemple, un pointeur vers le début du tableau, le tableau est accessible en utilisant l'arithmétique de pointeur ou un index de 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;
 
   // 指针中的数组地址
   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;
 
      // 移动到下一个位置
      ptr++;
   }
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

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;    // 这是正确的语法
      var++;       // 这是不正确的
   }
   return 0;
}

opérateur de pointeur * est appliqué à la var est parfaitement acceptable, mais la valeur de modification de var est illégal. En effet, var est un pointeur vers le début de la constante de réseau, il ne peut pas servir de la valeur de gauche.

Comme un nom de tableau correspond à une constante de pointeur, ils ne changent pas la valeur du tableau, vous pouvez toujours utiliser la forme de pointeur d'expression. Par exemple, ce qui suit est une déclaration valide, le var [2] 500 missions:

*(var + 2) = 500;

La déclaration ci-dessus est valable, et peut avec succès compiler, car var inchangé.

C ++ pointeurs C ++ pointeurs