除了指定運算子=、取址運算子 &
與取值運算子 *
之外,還有 +
、-
、++
、--
、+=
與 -=
等運算子可以使用在指標上。
指標的加法與減法與一般數值的加減法不同,在指標運算上加 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 即是在記憶體位址上退後一個資料型態單位的長度。