如何將二維數組作為函數的參數傳遞,這是涉及到多維數組時經常要遇到的問題。長期來,我們往往知其然,但不知其所以然。這裡簡單總結一下。
1.《C程序設計》中講到:可以用二維數組名作為實參或者形參,在被調用函數中對形參數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:
Func( array[][ Func( array[][]);
二者都是合法而且等價,但是不能把第二維或者更高維的大小省略。兩個示例程序如下:
#include <iostream> fun( a[][],( i=;i<n;i++( j=;j<n;j++<<a[i][j]<< test[][]={{,},{,
上面程序提供了二維數組中兩個維度的大小,再看下面:
#include <iostream> fun( a[][],( i=;i<n;i++( j=;j<n;j++<<a[i][j]<< test[][]={{,},{,
上述兩段程序均可正常運行,輸出結果:
3.如果把二維數組名傳遞給int**,編譯階段將會報錯:不能將參數 1 從“int [2][2]”轉換為“int **。因為二維數組的結構和二維指針是不同的,在底層,二維數組的結構和一維數組是一樣的。在二維數組中,a和a[0]均指向數組首地址,而且二維數組是按行順序存儲的。
。這樣,把二維數組傳遞給int**的程序也就不難理解了,如下:
#include <iostream> fun( **a,( i=;i<n;i++( j=;j<n;j++<<*((*)a+i*n+j)<<endl; test[][]={{,},{, **)test,
我的理解大致就是這樣了。