日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维数组的传参数的方法

發布時間:2025/7/14 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维数组的传参数的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

如何將二維數組作為函數的參數傳遞

??今天寫程序的時候要用到二維數組作參數傳給一個函數,我發現將二維數組作參數進行傳遞還不是想象得那么簡單里,但是最后我也解決了遇到的問題,所以這篇文章主要介紹如何處理二維數組當作參數傳遞的情況,希望大家不至于再在這上面浪費時間。

正文:

?

??首先,我引用了譚浩強先生編著的《C程序設計》上面的一節原文,它簡要介紹了如何

將二維數組作為參數傳遞,原文如下(略有改變,請原諒):

?

??[原文開始]

????可以用二維數組名作為實參或者形參,在被調用函數中對形參數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:

????void Func(int array[3][10]);

????void Func(int array[][10]);

????二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

????void Func(int array[][]);

????因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而并不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

????void Func(int array[3][]);實參數組維數可以大于形參數組,例如實參數組定義為:

????void Func(int array[3][10]);

????而形參數組定義為:

????int array[5][10];

????這時形參數組只取實參數組的一部分,其余部分不起作用。

??[原文結束]

?

??大家可以看到,將二維數組當作參數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學編譯原理這么課程的時候知道編譯器是這樣處理數組的:

??對于數組?int p[m][n];

??如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),編譯器是這樣尋址的,它的地址為:

??p + i*n + j;

??從以上可以看出,如果我們省略了第二維或者更高維的大小,編譯器將不知道如何正確的尋址。但是我們在編寫程序的時候卻需要用到各個維數都不固定的二維數組作為參數,這就難辦了,編譯器不能識別阿,怎么辦呢?不要著急,編譯器雖然不能識別,但是我們完全可以不把它當作一個二維數組,而是把它當作一個普通的指針,再另外加上兩個參數指明各個維數,然后我們為二維數組手工尋址,這樣就達到了將二維數組作為函數的參數傳遞的目的,根據這個思想,我們可以把維數固定的參數變為維數隨即的參數,例如:

?

????void Func(int array[3][10]);

????void Func(int array[][10]);

??變為:

????void Func(int **array, int m, int n);

?

??在轉變后的函數中,array[i][j]這樣的式子是不對的(不信,大家可以試一下),因為編譯器不能正確的為它尋址,所以我們需要模仿編譯器的行為把array[i][j]這樣的式子手工轉變為:

????*((int*)array + n*i + j);

????在調用這樣的函數的時候,需要注意一下,如下面的例子:

????int a[3][3] =

????{

??????{1, 1, 1},

??????{2, 2, 2},

??????{3, 3, 3}

????};

????Func(a, 3, 3);

?

??根據不同編譯器不同的設置,可能出現warning?或者error,可以進行強制轉換如下調用:?

????Func((int**)a, 3, 3);

??其實多維數組和二維數組原理是一樣的,大家可以自己擴充的多維數組,這里不再贅述。寫到這里,我先向看了這篇文章后悔的人道歉,浪費你的時間了。下面是一個完整的例子程序,這個例子程序的主要功能是求一個圖中某個頂點到其他頂點的最短路經,圖是以鄰接矩陣的形式存放的(也就是一個二維數組),其實這個函數也是挺有用的,但是我們這篇文章的重點在于將二維數組作為函數的參數傳遞。

?

//二維數組傳參問題示例 #include<iostream> using namespace std; //方法1:傳遞數組,注意第二維必須標明 void fun1(int arr[][3],int iRows) {for(int i=0;i<iRows;i++){for(int j=0;j<3;j++){cout<<arr[i][j]<<" ";}cout<<endl;}cout<<endl; } //方法二:一重指針 void fun2(int (*arr)[3],int iRows) {for(int i=0;i<iRows;i++){for(int j=0;j<3;j++){cout<<arr[i][j]<<" ";}cout<<endl;}cout<<endl; } //方法三:指針傳遞,不管是幾維數組都把他看成是指針, void fun3(int*arr,int iRows,int iCols) {for(int i=0;i<iRows;i++){for(int j=0;j<3;j++){cout<<*(arr+i*iRows+j)<<" ";}cout<<endl;}cout<<endl; } int main() {int a[2][3]={{1,2,3},{4,5,6}};fun1(a,2);cout<<endl;fun2(a,2);cout<<endl;//此處必須進行強制類型轉換,因為a是二維數組,而需要傳入的是指針//所以必須強制轉換成指針,如果a是一維數組則不必進行強制類型轉換//為什么一維數組不用強制轉換而二維數組必須轉換,此問題還沒解決,期待大牛!fun3((int*)a,2,3);cout<<endl; }

  

?

轉載于:https://www.cnblogs.com/aTianTianTianLan/p/4219917.html

總結

以上是生活随笔為你收集整理的二维数组的传参数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91.xxx.高清在线 | 97精品一区二区视频在线观看 | 国产sm在线 | 久久精品国产亚洲av麻豆 | 亚洲久久久 | 欧美精品在线第一页 | 日本欧美一级片 | 亚洲成人麻豆 | 国产无遮挡免费 | 国产综合在线观看视频 | 疯狂少妇| 色噜噜狠狠一区二区三区牛牛影视 | 一区二区三区国产精品视频 | 丝袜+亚洲+另类+欧美+变态 | 亚洲黄在线观看 | 亚久久| 亚洲久久在线观看 | 一级a毛片免费观看久久精品 | 亚洲av日韩av在线观看 | 波多野结衣在线观看一区二区三区 | 四虎永久免费在线观看 | 99精品视频免费看 | 日日cao| 99精品欧美一区二区蜜桃免费 | 在线观看亚洲天堂 | 操到喷水 | 热久久久| 欧洲精品免费一区二区三区 | 精彩久久| 久久97精品久久久久久久不卡 | 日韩有码一区二区三区 | 欧美日韩国| 欧美一区成人 | 91国在线 | 黄色在线观看av | 精品一区二区久久久久久久网站 | 国模无码视频一区 | 精品一区二区久久久久蜜桃 | 免费av在线播放网址 | 91青青草| 国产视频综合 | 欧美精品久久 | 精品理论片 | 色综合天天综合网天天看片 | 亚洲成人中文字幕在线 | 国产精品自在线 | 欧美黄色网 | 久久99久久99| 大尺度摸揉捏胸床戏视频 | www.美色吧.com | 性色AV无码久久一区二区三 | 国产精品久久久久久免费免熟 | aaa一区二区三区 | 精品少妇爆乳无码av无码专区 | 男人天堂网av | 亚洲高清色 | 亚洲女人久久久 | www日日| 亚洲奶汁xxxx哺乳期 | 亚洲国产精品va在线 | 午夜av在线免费观看 | av动漫网 | 可以免费看的av | 亚洲视频免费在线播放 | 国产精品国产三级国产aⅴ9色 | 天天综合网久久综合网 | 最新视频 - 8mav | 五月婷婷在线视频 | 最新欧美大片 | 污到下面流水的视频 | 日韩乱码人妻无码中文字幕 | 国产区第一页 | 国产色视频在线 | 久久一二三区 | 台湾佬综合网 | 亚洲区一区 | 九色视频在线观看 | 天天搞夜夜 | www超碰在线| 美女试爆场恐怖电影在线观看 | 丰满人妻一区二区三区53视频 | 成人av在线影院 | 日韩精品在线免费观看 | 毛片毛片毛片毛片毛片毛片 | 日本熟妇成熟毛茸茸 | 亚洲三级电影网站 | 日韩av免费在线 | 亚洲婷婷av| 国产成人啪精品 | 欧美视频二区 | 疯狂做受xxxx国产 | 中文亚洲欧美 | 亚洲天堂手机版 | а√天堂中文在线资源8 | 91超级碰 | 日韩一区二区不卡视频 | 激情网站在线观看 | 亚洲1区| 91人人澡人人爽人人精品 |