2012-03-30 81 views
1

爲什麼當它作爲參數傳遞給一個函數(下例中爲10)時,需要指定C數組的元素數量?將多維數組傳遞給函數C

void myFun(int arr[][10]) {} 

這是因爲需要元素的數量來確定被訪問單元的地址嗎?

回答

3

是的。這是因爲arr[i][j]表示((int *)arr)[i * N + j]如果arrint [][N]:指針算術需要一行的長度。

1

編譯器需要有一個想法,當下一行開始在內存中(因爲二維數組只是一個連續的內存塊,一行接一行)。編譯器不是靈魂!

1

只有在您爲數組思想使用靜態分配時纔有必要。因爲生成代碼爲數組創建一個連續的內存塊,就像指出的那樣。

但是,如果你使用動態分配,這是沒有必要的,你只需要傳遞指針。

Regards