Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-22   C C 語言技術 <201910>   瀏覽次數:次   DMCA.com Protection Status

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
指標的運算