二维数组作为参数传递问题

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; 
} 
*/  

  

 

posted @ 2016-06-09 10:58  mahaitao617  阅读(586)  评论(0编辑  收藏  举报