程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中二維數組作為函數參數

C++中二維數組作為函數參數

編輯:C++入門知識

首先二維數組有如下兩種定義方式:

A.

int Arr[2][3]={{1,2,3},{4,5,6}};

B.

int **Arr=new int* [2];
for(int i=0;i<2;i++)
    Arr[i]=new int[3];
//initialize
for(int i=0;i<2;i++)
    for(int j=0;j<3;j++)
        Arr[i][j]=i*3+j+1;

但是兩種方式有一個重要的區別:方式A聲明的二維數組是按行連續存儲的,而方式B的每行之間一般並非連續存儲!

例如:雖然兩種方式都可以通過 Arr[i][j] *(*(Arr+i)+j) 訪問元素,但是方式A可以通過如下的類似一維數組的訪問方式訪問元素

*(Arr[0]+i*cols+j)

而這種訪問方法對於方式B是不正確的。


利用方式A二維數組按行連續存儲這種性質,可以將二維數組轉為一維指針作為函數參數,且具有良好的擴展性:

1.如已知有一按方式A定義的二維數組Arr,具有rows行,cols列,那麼欲將其作為函數Func的參數可以如下聲明

void Func(int *A,int rows,int cols){
    for(int i=0;i
也許我們還會想不用一維指針而是利用二維指針作為函數參數,如 void Func(int **A,int rows,int cols);

那麼在引用時即 Func(Arr,2,3); 會報錯提示“int (*)[3] 類型的實參與 int ** 類型的形參不兼容”即參數類型不匹配。所以,用方式A定義的二維數組只能按如上方式轉為一維指針作函數參數。 而利用二維指針作函數參數這種方法適用的是方式B。


2.由於方式B定義的二維數組非按行連續存儲,所以作函數參數的只能是二維指針,即如下聲明

void Func(int **A,int rows,int cols){
	for(int i=0;i
綜上,想將二維數組作為函數參數,首先要明確二維數組是按那種方式定義的(A or B),然後再采用相應的函數聲明方式。兩種函數聲明方式針對不同行列數都具有良好的擴展性。以上雖然是以二維數組為基礎作討論,但是原理可相通的推廣到三維及以上的多維數組,處理方式都是一樣的。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved