二維陣列指標問題

2021-09-26 04:57:27 字數 1404 閱讀 4252

編寫乙個程式,初始化乙個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 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...