列指標:被稱為是指標變數指向二維陣列的某個元素
一般使用時會有如下定義:
int a[3][4]=;
int *p;
而上述**定義的指標p,一般按照下表方式指向二維陣列a中的元素:
語法樣例說明
指向任意元素指標變數=&陣列名[下標1][下標2]p=&a[1][2]p指向的元素為7
指向首元素指標變數=&陣列名[0][0]
指標變數=*二位陣列名
p=&a[0][0]
或p=*a
p指向首元素,即數值1所在的位置
當指標p指向二維陣列a的首元素後,p+1指向第2個元素,p+2指向第三個元素,如下表:
p(對應的內容:1)p+1(對應的內容:2)p+2(對應的內容:3)p+3(對應的內容:4)
p+4(對應的內容:5)p+5(對應的內容:6)p+6(對應的內容:7)p+7(對應的內容:8)
p+8(對應的內容:9)p+9(對應的內容:10)p+10(對應的內容:11)p+11(對應的內容:12)
因為這種定義下的指標p,每執行加1操作後,將會指向下一列的乙個元素,因此稱為「列指標」
元素名稱元素位址元素內容
a[i][j]p+i*n+j*(p+i*n+j)
行指標:指標變數指向二維陣列的某一行
一般使用時,有如下定義:
int a[3][4]=;
int (*p)[4];//定義行指標,其「4」要和定義的二維陣列的列數目「4」相同
p=a; //行指標p指向二維陣列a的首行
對於行指標,可以按如下解釋理解:
可以將二維陣列的首行視為乙個特殊的元素,而這個特殊的元素其實就是乙個一維陣列。那麼上述**定義的二維陣列即為乙個由三個特殊元素組成的「一維陣列」。此時a即是這個一維陣列的名稱,按照一維陣列的定義及知識可得,a是這個一維陣列的陣列名,也是首位址,也就是第乙個元素的位址,也就是第一行的首位址,指的是首行一整行。所以,a+0.a+1,a+2都是行指標。(橘黃色和橘黃色對應,綠色和綠色對應)
所以就有如下**(描述指向各行的行指標):
表示方法說明指標型別
a或者a+0指向第0行行指標
a+1指向第1行行指標
a+2指向第2行行指標
有了行指標之後,我們以第0行為例,展開說明行裡的各個元素的表示方法等:
表示方法說明指標型別
a[0]是一維陣列名稱,首位址,第0個元素的位址(a[0]+0)列指標
a[0]+1第0行,第1個元素列指標
a[0]+2第0行,第2個元素列指標
a[0]+3第0行,第3個元素列指標
注:為了方便起見,我這裡的元素排序從0開始,即第0個,第1個,與陣列的下標對應。
元素名稱元素位址元素內容
a[i][j]*(a+i)+j或a[i]+j*(*(a+i)+j)或*(a[i]+j)
可表示為a[i]+j,由於a[i]等價於*(a+i)(根據一維陣列的定義可知),因此其位址可表示為*(a+i)+j。
先明白兩個前文說的兩個事情:
行指標:指的是一整行,不指向具體元素。
列指標:指的是二維陣列中某一行的某個具體元素。
可以將列指標認為是行指標的具體元素,行指標是列指標的位址。
兩者間的具體轉化:
*行指標--->列指標
&列指標--->行指標
*是指標運算,&取址運算。*後面必須是指標變數,&後面則什麼變數都可以。
行指標**:
#include//行指標輸入8個元素,再輸出
int main()
}//p=a;
for(i=0;i<2;i++)
}return 0;
}
參考:rockeyqin 行指標和列指標詳 行指標與列指標 2
行指標,顧名思義就是指向一行的指標。那麼 會用到行指標呢,用的最多的,那就是二維指標了,大家都知道,我們通常把二維指標看成乙個行列式,但是它在記憶體中的排序卻是和一維指標一樣的。比如組a 2 3 a是整個陣列的首位址,同時也指向第一行元素,即a是乙個行指標,它每加1,所指位址移動二維陣列的一行,a ...
指標與陣列之間的聯絡
指標和陣列的關係 對於乙個一維陣列,例如int a 10 那麼a代表的是陣列的首位址,它和 a 0 是等價的。定義指標int p,p a 等價於p a 0 如果 p 指向a 0 那麼 p 就是 a 0 中的元素,p i 是陣列元素 a i 的位址,p i 就是陣列元素 a i 的內容。指標與陣列的轉...
C語言的行指標和列指標
一 定義二維陣列 1 定義方式 資料型別 陣列名 行數 列數 例如 int a 3 4 3行4列 c語言對二維陣列採用的這種特殊的定義方式,使得二維陣列可以被看作一種特殊的一維陣列 它的元素又是乙個一維陣列。例如 上圖中的a可以看出是乙個一維陣列,他有3個元素 a 0 a 1 a 2 每個元素又包含...