Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-23   C   瀏覽次數:

C語言 - 第十九章 | 指標 - 指標與陣列

宣告一個陣列之後,陣列名稱用來參考至陣列的第一個元素的記憶體位址,例如在下面的程式中將指出,陣列arr&arr[0]指向的位置是相同的。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {

int arr[10] = {0};

printf("arr :\t\t%p\n", arr);
printf("&arr[0] :\t%p\n", &arr[0]);

return 0;
}


陣列的索引其實是相對於第一個記憶體位址的位移量,下面這個程式以指標運算與陣列索引操作,顯示出相同的對應位址值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define LENGTH 10

int main() {

int arr[LENGTH] = {0};
int *ptr = arr;

for(int i = 0; i < LENGTH; i++) {
printf("&arr[%d]: %p", i ,&arr[i]);
printf("\t\tptr + %d: %p\n", i, ptr + i);
}

return 0;
}

將陣列的第一個元素位址指定給ptr,然後對ptr作遞增運算,每遞增一個單位,其與陣列相對應索引的元素之記憶體位址都相同,這可以說明陣列索引的背後意義。


利用指標運算來取出陣列的元素值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#define LENGTH 5

int main() {

int arr[LENGTH] = { 10, 20, 30, 40, 50 };
int* ptr = arr;

// 以指標方式存取資料
for (int i = 0; i < LENGTH; i++) {
printf("*(ptr + %d): %d\n", i, *(ptr + i));
}
putchar('\n');

// 以陣列方式存取資料
for (int i = 0; i < LENGTH; i++) {
printf("ptr[%d]: %d\n", i, ptr[i]);
}
putchar('\n');

// 以指標方式存取資料
for (int i = 0; i < LENGTH; i++) {
printf("*(arr + %d): %d\n", i, *(arr + i));
}
putchar('\n');

// 以陣列方式存取資料
for (int i = 0; i < LENGTH; i++) {
printf("arr[%d]: %d\n", i, arr[i]);
}
putchar('\n');

return 0;
}

使用指標運算配合*運算子來取出陣列中的每個元素,也可以配合下標運算子來取出陣列元素。


註:以上參考了
hackersir gitbooks
指標與陣列