二維數(shù)組的存儲(chǔ)方式是和一維數(shù)組沒(méi)什么區(qū)別,但是用二維數(shù)組做參數(shù),它的形參該怎樣寫?要注意的是:函數(shù)中的形參其實(shí)就相當(dāng)于一個(gè)聲明,并不產(chǎn)生內(nèi)存分配,形參的目的就是要讓編譯器知道函數(shù)參數(shù)的數(shù)據(jù)類型。
正確的是:void Func(int array[3][10]); void Func(int array[][10]);可以省略第一維的大小,錯(cuò)誤的是void Func(int array[][].這樣的用法只能在初始化時(shí)可以用);這樣寫也是錯(cuò)誤:void Func(const int m,const int n,int array[m][n]);或void Func(int m,int n,int array[m][n]);大家都知道數(shù)組的索引必須是個(gè)常量表達(dá)式,void Func(const int m,const int n,int array[m][n]);如果const int m沒(méi)有初始化,那么系統(tǒng)將m或n自動(dòng)初始化為0,所以這樣些是不對(duì)的,如果我們采用這樣void Func(int **array, int m, int n)的形式,那么在實(shí)際的函數(shù)調(diào)用是,我們就要進(jìn)行強(qiáng)制轉(zhuǎn)換才可以用,我們可以這樣調(diào)用void Func((int **)array, int m, int n);在函數(shù)調(diào)用時(shí),要把數(shù)組形式寫成指針形式如*((int*)array + n*i + j);直接寫int array[i][j]會(huì)導(dǎo)致錯(cuò)誤,編譯可以通過(guò),在VC編譯器中執(zhí)行會(huì)出現(xiàn)異常,DEV編譯器會(huì)出現(xiàn)一個(gè)隨機(jī)值,原因就在于如果寫成int array[i][j],編譯器無(wú)法正確的尋址,當(dāng)然各種編譯器對(duì)它的處理結(jié)果是不一樣的。如果我們的形參是數(shù)組,那么我們?cè)诤瘮?shù)體中可以用指針也可以用數(shù)組形式,但是如果我們形參數(shù)中用的是指針,最好也用指針,有時(shí)用數(shù)組形式會(huì)出錯(cuò),二維數(shù)組就是這樣。