陣列名即陣列在記憶體的首位址。定義指標變數並指向陣列首址:
int a[10], *ptr;
ptr = a; // 或 ptr = &a[0];
兩者等價,因 a 即 &a[0]。ptr 成為指向陣列 a 的指標變數。
| 形式 | 意義 | 等價於 |
|---|---|---|
ptr + n | 第 n 個元素位址 | &a[n] |
*(ptr + n) | 第 n 個元素值 | a[n] |
ptr[n] | 第 n 個元素值 | *(ptr + n) |
其中 n = 0~9。
#include <stdio.h>
int main() {
int n, a[10], *ptr = a;
for (n = 0; n <= 9; n++)
scanf("%d", &a[n]);
printf("1------output!\n");
for (n = 0; n <= 9; n++)
printf("%4d", a[n]);
printf("\n");
return 0;
}
輸入:1234567890 → 輸出:1 2 3 4 5 6 7 8 9 0
#include <stdio.h>
int main() {
int n, a[10], *ptr = a;
for (n = 0; n <= 9; n++)
scanf("%d", ptr + n); // 位址傳遞
printf("2------output!\n");
for (n = 0; n <= 9; n++)
printf("%4d", *(ptr + n)); // 取值
printf("\n");
return 0;
}
結果相同。指標法更接近底層記憶體操作,理解指標運算本質有助於掌握 C 語言精髓。