指標引用多維陣列

2021-09-25 15:21:29 字數 1525 閱讀 2726

*除了表示取元素之外,還可以表示取哪一維
1、a是乙個行指標。指向乙個有四個元素的陣列,佔16個位元組

&a是乙個指向二維陣列的指標,二維陣列有12個元素,佔48個位元組

*a是乙個指向int型別資料的指標。

2、

a[i][j]等價於*((a+i)+j) &a[i][j]等價於(a+i)+j

a[i]等價於*(a+i) &a[i]

3、二維陣列名是指向行的,它不能對如下說明的指標變數p直接賦值:

int a[3][4]=,,},*p;

其原因就是p與a的物件性質不同,或者說二者不是同一級指標。c語言可以通過定義行陣列指標的方法,使得乙個指標變數與二維陣列名具有相同的性質。

行陣列指標的定義方法如下:

資料型別 (*指標變數名)[二維陣列列數];

例如,對上述a陣列,行陣列指標定義如下:

int (p)[4];它表示,陣列p有4個int型元素,分別為(*p)[0]、(*p)[1]、(*p)[2]、(*p)[3] ,亦即p指向的是有4個int型元素的一維陣列,即p為行指標

此時,可用如下方式對指標p賦值:

p=a;

陣列與指標關係密切,陣列元素除了可以使用下標來訪問,還可用指標形式表示。陣列元素可以很方便地用陣列名常指標來表示,以3維int型陣列a舉例,其中的元素a[i][j][k]可用下述形式表示:

(1)*

(a[i]

[j]+k)

a[i]

[j]是int型指標,其值為&a[i]

[j][

0],因此,a[i]

[j][k]可表述為*

(a[i]

[j]+k)。

(2)*(*

(a[i]

+j)+k)

和第一種形式比較,不難發現a[i]

[j]=

*(a[i]

+j),a[i]是二級指標,其值為&a[i][0

]。(3)*(*

(*(a+i)

+j)+k)

將第2種形式的a[i]替換成了*

(a+i),此處a是**指標,其值為&a[0]。

此處以3維陣列舉例,還可進一步推廣到更高維的情況。

指標也可作為陣列中的元素,將乙個個指標用陣列形式組織起來,就構成了指標陣列。

乙個陣列,若其元素均為指標型別資料,稱為指標陣列,也就是說,指標陣列中的每乙個元素都存放乙個位址,相當於乙個指標變數。

定義一維指標陣列的一般形式為

型別名 *陣列名[陣列長度]

;int

*p[4

];

指標 多維陣列 陣列指標 指標陣列

之前對陣列的概念一直沒有理解透徹,只覺得陣列名就是個常量指標而已,用法和基本的指標差不多。所以當我嘗試用二級指標去訪問二維陣列時,就經常會出錯。下面就是剛開始寫的乙個錯誤的程式 include int main int parray null parray iarray printf array 0...

多維陣列和多維指標

指向指標的指標 指標變數在記憶體中會占用一定的空間 可以定義指標來儲存指標變數的位址 int pp本質上還是指標,只是兩個 告訴你這是乙個指向指標的指標char p null char p2 p p2 給p賦值沒有問題,但怎麼使用p 呢?這就需要我們前面多次提到的鑰匙 第一步 根據 p 這個變數,取...

多維陣列 和 多維指標

指標變數在記憶體中會占用一定的空間。可以定義指標來儲存指標變數的位址值。舉例 舉例說明,多級指標的使用,重置動態空間大小 include include int reset char p,int size,int new size else return ret int main return 0 ...