*除了表示取元素之外,還可以表示取哪一維
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 ...