Latest web development tutorials

C ++ Zeiger vs Array

C ++ Zeiger C ++ Zeiger

Zeiger und Arrays sind eng miteinander verbunden. In der Tat, Zeiger und Arrays in vielen Fällen sind austauschbar. Zum Beispiel kann ein Zeiger auf den Anfang des Arrays kann der Array unter Verwendung Zeigerarithmetik oder Array-Index zugegriffen werden. Betrachten Sie das folgende Programm:

#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;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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

Allerdings Zeiger und Arrays sind nicht vollständig austauschbar. Betrachten Sie zum Beispiel das folgende Programm:

#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;
}

Pointer Operator * ist mit dem var angelegt ist durchaus akzeptabel, aber die Änderung var Wert ist illegal. Dies liegt daran, var ein Zeiger auf den Anfang des Arrays konstant ist, kann es nicht als der linke Wert dienen.

Da ein Array-Name auf einen Zeiger Konstante entspricht, sie nicht den Wert des Feldes ändern, können Sie immer noch den Zeiger Ausdrucksform verwenden. Zum Beispiel ist das folgende eine gültige Aussage, die var [2] 500 Zuordnung:

*(var + 2) = 500;

Die obige Aussage ist gültig und kann erfolgreich zu kompilieren, weil var unverändert.

C ++ Zeiger C ++ Zeiger