二維陣列作為引數傳遞問題

weixin_30488085發表於2020-04-06

int a[2][2]={{2,6},{9,11}};

我定義了這樣一個陣列,我想把這個陣列作為引數傳遞到函式中,並要在函式中能引用該二維陣列的元素,怎辦呢?

第一種方式就是直接傳遞二維陣列,但是必須註明第二維的值。因為只傳遞a[][]編譯器無法分配這樣的陣列,所以要

傳a[][2],第二種方式是傳遞指標陣列方式,int(*a)[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;  
}  
  
/* 
#include<iostream> 
using namespace std; 
void fun(int *a,int length) 
{ 
    int i; 
    for(i=0;i<length;i++) 
    { 
        cout<<a[i]<<" "; 
    } 
    cout<<endl; 
} 
int main() 
{ 
    int a[4]={1,2,3,4}; 
    fun(a,4); 
    cout<<endl; 
    return 0; 
} 
*/  

  

 

轉載於:https://www.cnblogs.com/mahaitao/p/5572095.html

相關文章