編寫乙個程式,初始化乙個double型別的3×5二維陣列,使用乙個處理變長陣列的函式將其拷貝至另乙個二維陣列中。還要編寫乙個以變長陣列為形參的函式以顯示兩個陣列的內容。這兩個函式應該能處理任意n×m陣列。(《c primer》10_6 程式設計練習)
**如下
void
copy2d
(int row
, int col
,double(*
)[cols],
double(*
)[cols])
;//宣告拷貝二維陣列函式
void
display
(int row
, int col
,double(*
)[cols])
;//宣告顯示陣列函式
int main()
; double target[3]
[5];
copy2d(3
,5,source,target)
;display(3
,5,source)
;display(3
,5,source);}
void
copy2d
(int row
, int col
,double
(*ar)
[cols],
double
(*new_ar)
[cols])
void
display
(int row
, int col
,double
(*ar)
[cols])
}
初始化:指標型別 (*陣列名)[陣列列下標],例如double (*p)[col]
,二維陣列中列下表定義時不可省略
當我們定義乙個陣列:double (*p)[col]
時,*p表示p是乙個指標,它指向乙個以二維陣列每一行為元素的一維陣列,p陣列每個元素包含col個子元素
對於二維陣列指標p,本質上是由二維陣列每一行為元素組成的一維陣列,它指向陣列的第一行位址,*p表示第一行中的所有元素組成一維陣列,也就是該陣列第乙個元素的位址,而**p才表示二維陣列的第乙個元素的值。陣列每一行的位址和每一行的首元素位址相同,即p==*p
。(*(p+i))[2]
和*(*(p+1)+2)
是等價的
對二維陣列指標進行加減整數,操作為移動陣列的行;進行列操作時要解引用後再進行加減整數操作,如獲取二維陣列元素p[1][2]
的指標操作為*(*(p+1)+2)
定義二維陣列指標時 不可以使用如 double **p的形式,在c中,不支援行列均是變長的二維陣列,即無論何時二維陣列的列下標一定要有!
二維陣列 二維陣列和指標
include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...
二維陣列的指標問題
最近遇到一道題,題目是這樣的 int x 6 4 p 4 p x 則 p 2 指向 a.x 0 1 b.x 0 2 c.x 1 0 d.x 2 0 先給出正確答案是d.然後我想上機驗證一下,如下 int main int p 2 b p x b p 1 return 0 不過b p 1 這句報錯,後...
二維陣列與二維指標
1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...