二维数组的指针传递法
很多时候我都是直接通过传入一个 固定的数字来传递一个二维数组,
比如这样子定义函数 int fun(int a[][3],int n)
调用函数是 fun(a,n);
这样子调用的二维数组只能是固定已经知道的,不够灵活性。
以下介绍一下通过指针直接随意设定的二维数组;
定义函数是 int fun(int **a,int n)
调用函数也是直接 fun(a,n);
不过有一点就是在定义数组的时候得分配一下空间以及定义的方式有些许不同,详细见下。
1 #include<iostream> 2 using namespace std; 3 int fun(int **a,int n) //在这里面操作二维数组也是正常的使用 a[i][j],不用通过 *(*(a+i)+j) 这样子的繁琐的指针地址和操作 5 for(int i=0;i<n;i++) 6 { 7 for(int j=0;j<n;j++) 8 { 9 cout<<a[i][j]<<" "; 10 } 11 cout<<endl; 12 } 13 } 14 15 int main() 16 { 17 int n; 18 cin>>n; 19 int *a[n]; 20 for(int i=0;i<n;i++) //给每行的数组分配一下空间 21 { 22 a[i]=new int [n]; 23 } 24 25 //下面初始化一下数组 26 int count=0; 27 for(int i=0;i<n;i++) 28 { 29 for(int j=0;j<n;j++) 30 { 31 a[i][j]=count; 32 count++; 33 } 34 } 35 fun(a,n);//调用二维数组就可以直接用二维数组的起始地址 a 传入就可以了 36 37 return 0; 38 }
1 //上面如果不太懂的话可以对照一下下面的一维数组的指针传递,类似。 2 #include<iostream> 3 using namespace std; 4 int fun1(int *a,int n) 5 { 6 for(int i=0;i<n;i++) 7 { 8 cout<<a[i]<<" "; 9 } 10 } 11 int main() 12 { 13 int n; 14 cin>>n; 15 int *b; 16 b=new int [n]; 17 //初始化 18 for(int i=0;i<n;i++) 19 { 20 b[i]=i; 21 } 22 fun1(b,n); 23 return 0; 24 }