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
指標與陣列