2014-02-16 48 views
0

所以我的想法:二維數組和動態分配如何工作?

一個二維數組是一個數組的數組。如果一個數組是Y的X,那麼每個X都指向一個長度爲Y的數組。該部分是否正確?這就是爲什麼同樣,當你要動態分配C中的數組,你不得不說

array=(type **)malloc(X*sizeof(type *)). 

類型*是告訴編譯器,每個數組索引將是一個指向另一個數組所以它應該是足夠大足以容納指針或數組?

此外,爲什麼這個循環需要?

for(i =0;i<X;i++) 
{ 
array[i]=(type *)malloc(Y*sizeof(type)) 
} 

是對鑄造

(type *) 

需要的,因爲,使每個索引是一個指針指向一個1-d數組?但這一次在malloc我們可以說(打字)而不是(type *),因爲索引不會再持有指針了?

EDIT

Oh..so這僅僅是通過在1-d陣列點具有每一個索引到另一個1-d陣列模仿2-d陣列。好。在這種情況下,我的邏輯是爲什麼每個malloc都有這個特定的論證是有意義的? 此處的代碼取自此SO問題 dynamic allocation/deallocation of 2D & 3D arrays

+0

對於初學者來說,這不是一個2D陣列。它是一個一維數組指針。二維數組被聲明爲'Type arr [N] [M];'其中N和M是你想要的尺寸。指針數組通常用於模仿這種行爲,但它們不相同。 – WhozCraig

+0

[不要在C中輸入'malloc'的返回值](http://stackoverflow.com/a/605858/440558)。 –

回答

1

您的代碼不涉及實際的二維數組。這是一個2D陣列:

int myArray[X][Y]; 

它不涉及指針。

你的代碼涉及到一個指針數組的指針,這不是一回事。

爲什麼這個循環需要


因爲否則指針數組中的所有指針都不指向任何存儲。


是中投需要?

+0

+1爲什麼我總是在M之前使用N,我永遠不會明白。也許它是一個遺傳物= P – WhozCraig