二維數組的指針傳遞法ios
不少時候我都是直接經過傳入一個 固定的數字來傳遞一個二維數組,數組
好比這樣子定義函數 int fun(int a[][3],int n) 函數
調用函數是 fun(a,n); spa
這樣子調用的二維數組只能是固定已經知道的,不夠靈活性。指針
如下介紹一下經過指針直接隨意設定的二維數組;code
定義函數是 int fun(int **a,int n) blog
調用函數也是直接 fun(a,n); ci
不過有一點就是在定義數組的時候得分配一下空間以及定義的方式有些許不一樣,詳細見下。io
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 }