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