C指標與二維陣列等等。。

2022-07-26 03:45:10 字數 1089 閱讀 2640

首先  指標式分級別的  *p是一級指標   **p是二級指標     

比如我們定義    

int a[5];

int *p;

此時 a作為陣列中第乙個元素的位址     是乙個一級 指標, 所以 直接  p=a 就可以  

若要得到第n個元素   只需  *(p+n)

下面主要討論二維陣列與指標

int a[3][3]=,,};

int *p;

int (*p)[3];

陣列a是乙個二維陣列,其在記憶體中的儲存方式 是順序儲存的,如果我們用p訪問任意乙個元素的話 有如下方法  比如訪問a[2][2];

1.p=&[0][0];            *(p+2*3+2); 

2.p=a[0];            *(p+2*3+2); 

但是不能使用 p=a;

首先對於上面的二維陣列a  可以看做 陣列a有三個元素;  其中每個元素為乙個包含3個值的陣列, 所以 a其實是a[0]的位址,a+1 是a[1]的位址

這樣*a 就得到了a[0]的內容   而a[0]是乙個有三個元素的陣列 的首元素的位址,所以再*a[0] 才得到1; 從這個過程來看 a是乙個二級指標,顯然不能直接賦值給p

*a與a[0]等價、*(a+1)與a[1]等價、*(a+2)與a[2]等價

由此,對於陣列元素a[i][j],用陣列名a的表示形式為:

*(*(a+i)+j)

指向該元素的指標為:

*(a+i)+j

對上述二維陣列a,雖然a[0]、a都是陣列首位址,但二者指向的物件不同,a[0]是一維陣列的名字,它指向的是a[0]陣列的首元素,對其進行「*」運算,得到的是乙個陣列元素值,即a[0]陣列首元素值,因此,*a[0]與a[0][0]是同乙個值;

而a是乙個二維陣列的名字,它指向的是它所屬元素的首元素,它的每乙個元素都是乙個行陣列,因此,它的指標移動單位是「行」,所以a+i指向的是第i個行陣列,即指向a[i]。對a進行「*」運算,得到的是一維陣列a[0]的首位址,即*a與a[0]是同乙個值。當用int *p;定義指標p時,p的指向是乙個int型資料,而不是乙個位址,因此,用a[0]對p賦值是正確的,而用a對p賦值是錯誤的。這一點請讀者務必注意。

C 二維陣列與指標

從鍵盤輸入r行c列二維整型陣列,找出每一行的次最大值並顯示出來。要求 1 r和c為符號常量 2 二維陣列是動態申請生成的 3 每一行的次最大值是利用單獨的函式呼叫獲得的 4 對陣列元素的訪問以及函式引數宣告等都是利用指標實現的。include stdio.h include iostream inc...

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...

二維陣列與二維指標

一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...