除了指定運算子 =
、取址運算子 &
與取值運算子 *
之外,+
、-
、++
、--
、+=
與 -=
等運算子也可用在指標。
指標加法與減法與一般數值的加減不同,在指標運算上加 1 ,表示前進一個資料型態的記憶體長度,例如若 int
長度為 4 個位元組,在 int*
型態的指標上加 1,表示在位址上前進 4 個位元組的長度:
#include <iostream>
using namespace std;
int main() {
int *p = 0;
cout << "p 位址:" << p << endl
<< "p + 1:" << p + 1 << endl
<< "p + 2:" << p + 2 << endl;
return 0;
}
執行結果:
p 位址:0
p + 1:0x4
p + 2:0x8
這個位址顯示的單位是位元組;由於宣告的是 int*
型態的指標,每加 1 就會前進 4 個位元組的長度,若 double
是 8 個位元組,宣告的是 double*
型態的指標,每加 1 就會前進 8 個位元組,如以下的程式所示:
#include <iostream>
using namespace std;
int main() {
double *p = nullptr;
cout << "p 位址:" << p << endl
<< "p + 1:" << p + 1 << endl
<< "p + 2:" << p + 2 << endl;
return 0;
}
執行結果:
p 位址:0
p + 1:0x8
p + 2:0x10
以上舉的例子為指標的加法,在減法上觀念也是相同,對指標減 1 就是在位址上退後一個資料型態單位的長度。