1. 程式人生 > >c語言指標篇——陣列指標和指向二維陣列的指標變數(*p)[N]

c語言指標篇——陣列指標和指向二維陣列的指標變數(*p)[N]

陣列指標

首先,我們先介紹一下二維陣列和二維陣列的指標,二維陣列相當於一個特殊的一維數組裡面每個元素又是一個一維陣列,例如:int a [ 3 ] [3],可以看成一個3行的一個列陣列,每一列的元素又是一個長度為3的陣列,陣列名的一個特殊一維陣列的首地址,如下:
這裡寫圖片描述
a(第0行的首地址,也是可以是&a [0])指向a [0],對0行首地址元素的引用就有 *a = a [0];
a + 1(第一行的首地址)指向a [1],有*(a + 1)= a [1];
a + 2(第二行的首地址)指向a [2],有*(a + 2)= a [2];
a + i(第i行的首地址)指向一個[i]中,有*(a + 1)= a [i]中。
而a[0],a[1],a[2]又是裡面一維陣列的陣列名,因此a[i]可表示i行的首地址:
a[0](第0行第0個元素的地址)指向一個[0] [ 0 ],有*(a [ 0 ] +0)= a [0] [ 0 ];
a [0]+1(第0行第1個元素的地址)指向a [0] [1],有*(a [0] +1)= a [0] [1];
a [0] +2(第0行第2個元素的地址)指向a [0] [2],有*(a [0] +2)= a [0] [2]
總結:a[i]+j(第i行第j列個元素的地址)指向a[i][j], 有*(a[i]+j)=a[i][j],
即 * (*(a+i)+j)=a[i][j]。

二維陣列的指標變數

對於指向二維陣列的指標變數p,可以有兩種:
一種是指向陣列元素的列指標,一種是指向行的行指標,這時,p不是指向一個具體的陣列元素,而是指向一個包含m個元素的一維陣列。這裡對行指標特殊說明一下;
行指標的定義形式為:型別識別符號 (*指標變數名)[長度];
例如: int a[3][4],(*p)[4]=a; //這裡也可以寫為int a[3][4],(*p)[4]=&a[0];
其中p,p+1,p+2和a,a+1,a+2都是第i行的首地址。
使用指標變數訪問二維陣列的任意一個元素的方法
(1)使用列指標:定義一個列指標p,讓它指向二維陣列的第0個元素

int a[3][4];
int *p;
p=&a[0][0];   //因為a[0]是第0行的陣列名,所以p=&a[0][0]相當於p=a[0],因為a[i][j]前面共有i*4+j個元素,該二維陣列的任意i行j列元素可表示為*(p+i*4+j)

(2)使用行指標:定義一個行指標p,讓它指向二維陣列的第0行

int a[3][4];
int (*p)[4];
p=a;   //也可以為p=&a[0];   

其中* ( *(p+i)+j)表示任意一個i行j列的元素。