位置:首頁 > 高級語言 > C++教學 > C++指針運算

C++指針運算

指針是地址是一個數字值;因此,可以在一個數值上的指針進行算術運算。有一些可以在指針被用於4種算術運算符:++- ,+和-

要理解指針運算,讓我們考慮ptr是一個整數指針,它指向假設32位整數的地址1000,讓我們上的指針執行以下操作運算:

ptr++

ptr將指向的位置1004,因為每次ptr遞增,將指向下一個整數。此操作將指針移動到下一個內存位置,而不在內存位置影響實際值。如果ptr指向一個字符的地址是1000,那麼上麵的操作將指向1001的位置,因為下一個字符將在1001。

遞增指針:

我們更喜歡使用一個數組的一個指針程序,而不是因為變量指針可以被遞增,這是不能被遞增的,因為它不像一個常數指針數組名。下麵的程序遞增變量指針來訪問所述數組在每個後續單元:

#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 yiibaier.
   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;

      // yiibai to the next location
      ptr++;
   }
   return 0;
}

當上述代碼被編譯和執行時,它會產生一些結果如下:

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

遞減指針:

相同的考慮適用於遞減的指針,如下所示而減小其數據類型的字節數的值:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // let us have address of the last element in yiibaier.
   ptr = &var[MAX-1];
   for (int i = MAX; i > 0; i--)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // yiibai to the previous location
      ptr--;
   }
   return 0;
}

當上述代碼被編譯和執行時,它會產生一些結果如下:

Address of var[3] = 0xbfdb70f8
Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10

指針比較

指針可以通過關係運算符,如==,進行比較<和>。如果p1和p2指向被彼此相關的變量,例如相同的數組元素,則p1和p2可以進行有意義的比較。

下麵的程序修改前麵的例子通過隻要遞增1,變量指針指向可以是小於或等於所述數組的最後一個元素,這是地址的地址 &var[MAX - 1]:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // let us have address of the first element in yiibaier.
   ptr = var;
   int i = 0;
   while ( ptr <= &var[MAX - 1] )
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // yiibai to the previous location
      ptr++;
      i++;
   }
   return 0;
}

當上述代碼被編譯和執行時,它會產生一些結果如下:

Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200