日韩性视频-久久久蜜桃-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

總結

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

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

主站蜘蛛池模板: 蜜臀视频一区二区 | 一卡二卡三卡视频 | 97超碰超碰 | 精品性久久 | 精品人妻一区二区三区免费 | 天堂bt在线 | 中文字幕精品国产 | 日韩色综合 | 深爱激情站| 久久精品成人一区二区三区蜜臀 | 97色爱 | 夜夜操国产 | 在线电影一区二区 | 国产黄色小视频在线观看 | 丁香色欲久久久久久综合网 | 免费观看国产精品 | 中文字幕麻豆 | 国产影音先锋 | 日韩黄色免费电影 | 暗呦丨小u女国产精品 | 欧美狂猛xxxxx乱大交3 | 日本亲近相奷中文字幕 | 国产高潮自拍 | 国产精品久久久久久久专区 | 少妇2做爰bd在线意大利堕落 | 少妇一区二区视频 | 9人人澡人人爽人人精品 | 精品久久二区 | 欧美一区二区三区激情 | 久久人妻少妇嫩草av蜜桃 | 欧美 日韩 国产 亚洲 色 | 久久99激情 | 在线成人| 日韩欧美在线观看免费 | 国产精品第一页在线观看 | 日本精品一区二区三区四区的功能 | 精品国产一区二区三区在线 | 欧美中文字幕一区二区 | a级免费视频 | 国产精品麻豆一区二区三区 | 免费看日批视频 | 国产网红在线观看 | 蜜桃tv一区二区三区 | 97国产在线观看 | 国内自拍第三页 | 精品三区视频 | 欧美黄色成人 | 欧美真人性野外做爰 | 国产成人在线视频播放 | 日韩精品一区二区亚洲av观看 | 69福利视频| 久久99日韩 | 日韩黄色小视频 | 国产老妇伦国产熟女老妇视频 | 国产视频播放 | 91好色先生tv | 男女洗澡互摸私密部位视频 | www.一区二区.com | avtt在线播放 | 亚洲911精品成人18网站 | 色伊人影院| 天天操操操| 多啪啪免费视频 | 国产精品国产三级国产专区51 | 日批小视频 | 国产好片无限资源 | 国产日韩一区二区在线 | 亚洲精品日日夜夜 | 视色网 | 国产精品一区在线观看 | 国产一区二区三区视频免费在线观看 | 午夜私人影院 | 在线观看日韩精品 | 人人九九精 | 无码人妻av免费一区二区三区 | 亚洲人成影视 | 看一级黄色大片 | 女女同性女同一区二区三区按摩 | 久久久www免费人成人片 | 久久露脸国语精品国产91 | 国产成人无码精品久久久久久 | 国产精品卡一 | 4438x全国最大成人网 | 欧美三级视频 | 激情片网站 | 国产精品成人在线 | 久草视频免费在线播放 | 国产精品久久麻豆 | 一级做a爱片久久 | 26uuu成人网| 亚洲s码欧洲m码国产av | 欧美高清a| 寡妇av | 欧美国产成人精品一区二区三区 | 欧美国产高清 | 粉嫩av国产一区二区三区 | 97综合| 中文字幕欧美人妻精品 | 日韩在线 中文字幕 |