爲什麼當它作爲參數傳遞給一個函數(下例中爲10)時,需要指定C數組的元素數量?將多維數組傳遞給函數C
void myFun(int arr[][10]) {}
這是因爲需要元素的數量來確定被訪問單元的地址嗎?
爲什麼當它作爲參數傳遞給一個函數(下例中爲10)時,需要指定C數組的元素數量?將多維數組傳遞給函數C
void myFun(int arr[][10]) {}
這是因爲需要元素的數量來確定被訪問單元的地址嗎?
是的。這是因爲arr[i][j]
表示((int *)arr)[i * N + j]
如果arr
是int [][N]
:指針算術需要一行的長度。
編譯器需要有一個想法,當下一行開始在內存中(因爲二維數組只是一個連續的內存塊,一行接一行)。編譯器不是靈魂!
只有在您爲數組思想使用靜態分配時纔有必要。因爲生成代碼爲數組創建一個連續的內存塊,就像指出的那樣。
但是,如果你使用動態分配,這是沒有必要的,你只需要傳遞指針。
Regards