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