void f2(int *aryp, int nrows, int ncolumns) { ... array[i][j] is accessed as aryp[i * ncolumns + j] ... }
這個函數可以用問題 6.15 的數組如下調用:
f2(&array[0][0], NROWS, NCOLUMNS);
但是, 必須註明的一點是, 用這種方法通過 ``手工" 方式模擬下標的程序 未能嚴格遵循 ANSI C 標準; 根據官方的解釋, 當 x >= NCOLUMNS 時, 訪問 &array[0][0][x] 的結果未定義。
C99 允許變長數組, 一旦接受 C99 擴展的編譯器廣泛流傳以後, VLA 可能是 首選的解決方案。gcc 支持可變數組已經有些時日了。
當你需要使用各種大小的多維數組的函數時, 一種解決方案是象問題 6.13 那樣動態模擬所有的數組。
參考資料: [ISO, Sec. 6.3.6]; [C9X, Sec. 6.5.5.2]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)