C語言 - 第十八章 | 指標 - 指標的運算
指標的運算
除了:
還有+
、-
、++
、--
、+=
與-=
等運算子可以使用在指標上。
指標的加法與減法與一般數值的加減法不同,在指標運算上加1
,是表示前進一個資料型態的記憶體長度,例如在int
型態的指標上加1
,是表示在記憶體位址上前進4
個位元組的長度。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() {
int *ptr = 0;
printf("ptr 位置:%p\n", ptr); printf("ptr + 1:%p\n", ptr + 1); printf("ptr + 2:%p\n", ptr + 2); printf("ptr + 3:%p\n", ptr + 3);
return 0; }
|

如果宣告的是double
型態的指標,則每加1
就會前進8
個位元組。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() {
double *ptr = 0;
printf("ptr 位置:%p\n", ptr); printf("ptr + 1:%p\n", ptr + 1); printf("ptr + 2:%p\n", ptr + 2); printf("ptr + 3:%p\n", ptr + 3);
return 0; }
|

註:以上所舉的例子為指標的加法,在減法上觀念也是相同,對指標減1
即是在記憶體位址上退後一個資料型態單位的長度。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() {
int *ptr = 0;
printf("ptr 位置:%p\n", ptr); printf("ptr + 1:%p\n", ptr - 1); printf("ptr + 2:%p\n", ptr - 2); printf("ptr + 3:%p\n", ptr - 3);
return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() {
double *ptr = 0;
printf("ptr 位置:%p\n", ptr); printf("ptr + 1:%p\n", ptr - 1); printf("ptr + 2:%p\n", ptr - 2); printf("ptr + 3:%p\n", ptr - 3);
return 0; }
|

註:0x00000000
如果再減,會變成類似0xFFFFFFFC
,這“應該”是補數的概念,如果有錯我在修正。
註:以上參考了
hackersir gitbooks
指標的運算