指標的運算


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

指標的加法與減法與一般數值的加減法不同,在指標運算上加 1 ,是表示前進一個資料型態的記憶體長度,例如在 int 型態的指標上加 1,是表示在記憶體位址上前進 4 個位元組的長度,如以下的例子所示範的:

#include <stdio.h>

int main(void) {
    int *p = 0;

    printf("p 位置:%p\n", p);
    printf("p + 1:%p\n", p + 1);
    printf("p + 2:%p\n", p + 2);

    return 0;
}

執行結果:

p 位置:00000000
p + 1:00000004
p + 2:00000008

這個記憶體位址的顯示單位是位元組;由於宣告的是 int 型態的指標,所以每加 1 就會前進 4 個位元組的長度,如果宣告的是 double 型態的指標,則每加 1 就會前進 8 個位元組,如以下的程式所示:

#include <stdio.h>

int main(void) {
    double *p = 0;

    printf("p 位置:%p\n", p);
    printf("p + 1:%p\n", p + 1);
    printf("p + 2:%p\n", p + 2);

    return 0;
}

執行結果:

p 位置:00000000
p + 1:00000008
p + 2:00000010

以上舉的例子為指標的加法,在減法上觀念也是相同,對指標減 1 即是在記憶體位址上退後一個資料型態單位的長度。