C ++ Zeiger vs Array
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.