Latest web development tutorials

C ++ wskaźniki vs tablicy

Wskaźniki C ++ Wskaźniki C ++

Wskaźniki i tablice są ściśle powiązane. W rzeczywistości, wskaźniki i tablice w wielu przypadkach mogą być stosowane zamiennie. Na przykład, wskaźnik do początku tablicy, tablica można uzyskać za pomocą arytmetyki wskaźnik lub indeks tablicy. Rozważmy następujący program:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Jednak wskaźniki i tablice nie są w pełni wymienne. Na przykład, rozważmy następujący program:

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

Operator wskaźnik * jest stosowany do var jest całkowicie dopuszczalne, ale wartość modyfikacji var jest nielegalne. Jest tak, ponieważ zmienna jest wskaźnikiem początku stałej matrycy, to nie może służyć jako wartość po lewej stronie.

Ponieważ nazwą tablicy odpowiada stałym wskaźnikiem, nie zmieniają wartość tablicy, nadal można skorzystać z formularza wskaźnik ekspresji. Na przykład poniższe nie jest poprawnym oświadczeniu var [2] 500 przyporządkowanie:

*(var + 2) = 500;

Powyższe stwierdzenie jest ważny, a może z powodzeniem kompilacji, ponieważ var niezmienione.

Wskaźniki C ++ Wskaźniki C ++