C語言的行指標和列指標

2021-10-25 05:21:15 字數 1662 閱讀 2849

一、定義二維陣列

<1>定義方式

資料型別 陣列名[行數][列數];

例如:int a[3][4]; *****>3行4列

c語言對二維陣列採用的這種特殊的定義方式,使得二維陣列可以被看作一種特殊的一維陣列:它的元素又是乙個一維陣列。例如:

上圖中的a可以看出是乙個一維陣列,他有3個元素:

a[0],a[1],a[2].

每個元素又包含四個一維陣列。

a[0]----------->a[0][0] a[0][1] a[0][2] a[0][3]

a[1]----------->a[1][0] a[1][1] a[1][2] a[1][3]

a[2]----------->a[2][0] a[2][1] a[2][2] a[2][3]

這裡的a[0],a[1],a[2]我們把它叫做列指標。它指向了第乙個元素的位址。

我曾經說過,一維陣列的陣列名就就陣列首元素的首位址。

因此,這裡我們

a[0]就指向了a[0][0]的首位址。

a[1]就指向了a[1][0]的首位址。

a[2]就指向了a[2][0]的首位址。

a[0] *****==>&a[0][0]

a[1] *****==>&a[1][0]

a[2] *****==>&a[2][0]

注:a[0][0] 為乙個int型別的資料,故我們的a[0]要用乙個int *型別的指標來儲存。

因此,列指標是乙個一級指標型別。

以上的分析是針對我們的a[0],a[1],a[2]中子元素來分析。下面,我們來對我們的

二維陣列的首元素a來說。它擁有三個元素a[0],a[1],a[2]。

我們可以用以下方式來訪問者三個變數。

a >&a[0]

a + 1

=>&a[1]

a + 2 *****=>&a[2]

這裡的a[0],a[1],a[2]都是指標常量,我們對常量取位址的話,相當與對整個陣列的取大小。

故a是乙個陣列指標型別。這裡的a,我們叫做行指標。

綜上所述,我們有了乙個結論:

行指標型別:a , a + 1,a + 2----->加 + 1,移動一行元素的大小,它實質是乙個陣列

指標的型別。例如:int (*p)[2]

列指標型別:a[0],a[1],a[2] ->加1移動乙個資料元素的大小,它實質是乙個一維指標的型別。

例如:int *p;

行列指標變換的特點:

行指標 + *》列指標

a >&a[0] *a <

>*(&a[0]) <

=>a[0]

a + 1===>&a[1] *(a + 1) <=> *(&a[1] )<

=> a[1]

a + 2 >&a[2] *(a + 2) <

=> *(&a[2]) <*****==>a[2]

列指標 + &*****===》行指標

&a[0] **********==>a

&a[1] >a + 1

&a[2]

>a + 2

思考:int a[3][2];

a[1][1]這個元素的幾種表示方式?

*(*a + 1 * 2 + 1) , *(a[1] + 1) , ((a + 1) + 1), *(&a[1][1])

哈嘍C 《指標》行指標變數和列指標變數

行指標變數 指向由n個元素組成的一維陣列的指標變數 1 定義格式 資料型別 指標變數 n 注意 指標變數 外的括號不能缺,否則成了指標陣列 陣列的每個元素都是乙個指標 指標陣列 本章第6節介紹 2 賦值 行指標變數 2維陣列名 行指標變數 案例 使用行指標和列指標兩種方式輸出2維陣列的任一元素。1 ...

行指標與列指標 2

行指標,顧名思義就是指向一行的指標。那麼 會用到行指標呢,用的最多的,那就是二維指標了,大家都知道,我們通常把二維指標看成乙個行列式,但是它在記憶體中的排序卻是和一維指標一樣的。比如組a 2 3 a是整個陣列的首位址,同時也指向第一行元素,即a是乙個行指標,它每加1,所指位址移動二維陣列的一行,a ...

二維指標行指標和列指標的區別

二維行指標做輸出時定義及使用 includeint main void p a printf please input the row and colum n scanf d,d i,j printf a d d d n i,j,p i j 二維行指針對每個資料的引用 return 0 二維行指標做...