如果你向函數傳遞二位數組:
int array[NROWS][NCOLUMNS]; f(array);那麼函數的聲明必須匹配:
void f(int a[][NCOLUMNS]) { ... }或者
void f(int (*ap)[NCOLUMNS]) /* ap 是個數組指針 */ { ... }
在第一個聲明中, 編譯器進行了通常的從 ``數組的數組" 到 ``數組的指針" 的隱式轉換 (參見問題 6.3 和 6.4); 第二種形式中的指針 定義顯而易見。因為被調函數並不為數組分配地址, 所以它並不需要知道總的 大小, 所以行數 NROWS 可以省略。但數組的寬度依然重要, 所以列維度 NCOLUMNS (對於三維或多維數組, 相關的維度) 必須保留。
如果一個函數已經定義為接受指針的指針, 那麼幾乎可以肯定直接向它傳入 二維數組毫無意義。
參考資料: [K&R1, Sec. 5.10 p. 110]; [K&R2, Sec. 5.9 p. 113]; [H&S, Sec. 5.4.3 p. 126]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)