陣列指標——指向陣列首元素和指向陣列的區別
阿新 • • 發佈:2019-02-05
先定義一個一維陣列
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
有時我們會說,讓指標指向一個數組。然後寫出下面的程式碼:
int *p1 = a; // p1指向陣列首元素
實際上這種說法和上面的程式碼是不匹配的。因為陣列名a
是陣列首元素的地址, 所以p1
得到了首元素的地址,即p1
指向陣列首元素。所以我們可以像a
一樣使用p1
,在大部分場景下二者都是等價的,只有當sizeof(a)
或取它們的地址會體現出區別。
讓指標指向陣列的正確方法應該是這樣的:
int (*p2)[10] = &a; // p2指向陣列a
要使用指標p2
必須先解引用,下面表示式等價a[4]
(*p2)[4]
括號不能省略,因為下標引用優先順序比解引用高。
再舉一個二維陣列的例子,非常簡單,一看就懂。
#include <stdio.h>
int main() {
int b[2][3] = { 0, 1, 2, 3, 4, 5 };
int (*p3)[3] = b; // p3指向陣列首元素
int (*p4)[2][3] = &b; // p4指向陣列
printf("0行 1列 = %d\n", p3[0][1]);
printf("1行 2列 = %d\n", (*p4)[1][2]);
return 0;
}