轉(zhuǎn)自:http://hi.baidu.com/outsmile/blog/item/38db95ede27206d2b31cb11d.html
今天寫程序的時(shí)候要用到二維數(shù)組作參數(shù)傳給一個(gè)函數(shù),我發(fā)現(xiàn)將二維數(shù)組作參數(shù)進(jìn)行傳遞還不是想象得那么簡單里,但是最后我也解決了遇到的問題,所以這篇文章主要介紹如何處理二維數(shù)組當(dāng)作參數(shù)傳遞的情況,希望大家不至于再在這上面浪費(fèi)時(shí)間。
正文:
首先,我引用了譚浩強(qiáng)先生編著的《C程序設(shè)計(jì)》上面的一節(jié)原文,它簡要介紹了如何
將二維數(shù)組作為參數(shù)傳遞,原文如下(略有改變,請?jiān)?:
[原文開始]
可以用二維數(shù)組名作為實(shí)參或者形參,在被調(diào)用函數(shù)中對形參數(shù)組定義時(shí)可以指定所有維數(shù)的大小,也可以省略第一維的大小說明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等價(jià),但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的: void Func(int array[][]); 因?yàn)閺膶?shí)參傳遞來的是數(shù)組的起始地址,在內(nèi)存中按數(shù)組排列規(guī)則存放(按行存放),而并不區(qū)分行和列,如果在形參中不說明列數(shù),則系統(tǒng)無法決定應(yīng)為多少行多 少列,不能只指定一維而不指定第二維,下面寫法是錯(cuò)誤的: void Func(int array[3][]);實(shí)參數(shù)組維數(shù)可以大于形參數(shù)組,例如實(shí)參數(shù)組定義為: void Func(int array[3][10]); 而形參數(shù)組定義為: int array[5][10]; 這時(shí)形參數(shù)組只取實(shí)參數(shù)組的一部分,其余部分不起作用。[原文結(jié)束]
大家可以看到,將二維數(shù)組當(dāng)作參數(shù)的時(shí)候,必須指明所有維數(shù)大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學(xué)編譯原理這么課程的時(shí)候知道編譯器是這樣處理數(shù)組的:
對于數(shù)組 int p[m][n];
如果要取p[i][j]的值(i>=0 && i
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注