1. 程式人生 > >陣列指標——指向陣列首元素和指向陣列的區別

陣列指標——指向陣列首元素和指向陣列的區別

先定義一個一維陣列

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; }

這裡寫圖片描述