文章**:
在做資料結構迷宮實驗的時候,要生成乙個二維陣列儲存迷宮資料,為了保證程式的模組化,將生成部分單獨放進乙個函式migongsc()裡。大致**如下:
問題的關鍵就集中在了如何將主函式中宣告的二維陣列migong[8][9]傳遞到自定義函式中去。
方法1:模擬編譯器定址(本法來自csdn部落格,原文:
大體意思為:將二維陣列當作引數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。事實上,編譯器是這樣處理陣列的:
對於陣列 int p[m][n],如果要取p[i][j]的值(i>=0 && ip + i*n + j;//注意n!!
這裡如果省略了第二維或者更高維的大小,編譯器將不知道如何正確的定址。根據這個思想,我們可以在程式中模擬編譯器定址的方法,具體如下:
方法二:純樸法:
由方法一衍生,顧名思義,直接將宣告的二維陣列的陣列名(即首位址)傳遞到自定義函式中。但要注意,在函式定義中必須指明第二維的維度!
方法三:二維陣列一維化
c++中的陣列和vb等語言中的陣列例項化的方式不一樣,多維陣列可以說是陣列的巢狀,即二維陣列中,每乙個元素是乙個一維陣列。建立乙個一維陣列儲存每個子陣列(或者說元素陣列)的首位址,將該陣列傳遞給自定義函式。個人感覺除了提醒人陣列可以巢狀之外。。。是個很蛋疼的辦法。。。
總結:由於c++中不能對陣列進行引用(不知道為什麼),故而傳遞多維陣列的辦法都在指標上打主意。以上三個辦法中,第乙個辦法最具有擴充套件性,可以實現對陣列的先定義,後分配空間的美妙效果(詳見原文)。第二種辦法簡潔明瞭,符合思維習慣。第三種方法。。。呃。。。。
ps:非要使用引用的話,可以用二維向量代替陣列實現,以下為**:
注意二維向量宣告時的寫法:vector> migong(8);//注意空格!!!
C 中二維陣列
一 為什麼要使用多維陣列 生活中,有很多事物,僅僅用一維陣列,將無法恰當地被表示。還是說學生成績管理吧。乙個班級30個學員,你把他們編成1到30號,這很好。但現在有兩個班級要管理怎麼辦?人家每個班級都自有自的編號,比如一班學生編是1 30 二班的學生也是1 30。你說,不行,要進行計算機管理,你們兩...
二維陣列作為形參
以下是網上摘抄的一段 首先,我引用了譚浩強先生編著的 c程式設計 上面的一節原文,它簡要介紹了如何將二維陣列作為引數傳遞,原文如下 略有改變,請原諒 原文開始 可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大 明,如 void func i...
二維陣列做形參
來看 c primer 中給出的方法 cpp view plain copy void func1 intiarray 10 intmain 編譯通過,注意形參宣告一定要給出第二個維度的大小,要不編譯不過。cpp view plain copy void func2 int parray 10 vo...