指標的運算


除了指定運算子 =、取址運算子 & 與取值運算子 * 之外,+-++--+=-= 等運算子也可用在指標。

指標加法與減法與一般數值的加減不同,在指標運算上加 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 就是在位址上退後一個資料型態單位的長度。