一、定義二維陣列
<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 二維行指標做...