C 中關於二維陣列作為函式引數傳遞的問題

2022-07-20 05:06:12 字數 1245 閱讀 6096

在做資料結構迷宮實驗的時候,要生成乙個二維陣列儲存迷宮資料,為了保證程式的模組化,將生成部分單獨放進乙個函式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 中關於二維陣列作為函式

c 中關於二維陣列作為函式引數傳遞的問題 e覽眾山小 在做資料結構迷宮實驗的時候,要生成乙個二維陣列儲存迷宮資料,為了保證程式的模組化,將生成部分單獨放進乙個函式migongsc 裡。大致 如下 問題的關鍵就集中在了如何將主函式中宣告的二維陣列migong 8 9 傳遞到自定義函式中去。方法1 模擬...

二維陣列 作為函式引數

前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...

C 中二維陣列作為函式引數

變數在作用域裡面被宣告的是什麼型別,就當作什麼型別來用。1 引數是二維陣列,但是要指定第二維的維數。int array 10 10 函式宣告 void fuc int a 10 函式呼叫 fuc array 在函式fuc中,a是二維陣列。使用a i j 形式來訪問陣列中元素。2 引數使用一維指標陣列...