將二維陣列傳遞函式(需運用指標陣列)【自我延伸彈性版函式接收】

練習將二維陣列內容傳遞至函式運用,然後利用sizeof將陣列大小算出,套用迴圈後,即可讓不同大小二維陣列通用一個函式。

#include<stdio.h>
void print(int **v,int x,int y){
     int i,j;
     for(i=0;i<x;i++){
       for(j=0;j<y;++j){
      printf("V[%d][%d]=%d\t",i,j,v[i][j]);
      }
      printf("\n");
}
}

int main(){
     int v[3][3]={{1,2,3},{4,5,6},{7,8,9}};
//  int v[2][3]={{1,2,3},{4,5,6}};//(求證用)
//   int v[4][1]={{1},{2},{3},{4}};//(求證用)
    int x,y;
     y=sizeof(*v)/4;//1個int為4,*v即為v[],每個v[]裡面有幾個空間即為y
     x=sizeof(v)/4/y;//1個int為4,二維陣列全部占用多少空間除去y(每個v[]裡面的空間數)等於x
     int *a[x];//指標陣列有x個大
     for(int i=0;i<x;++i){
         a[i]=v[i];
     }//將二維陣列v[x]隱性轉型後取址v[0]~v[x],位址存入指標陣列a[x];

//   printf("x=%d\ny=%d\n",x,y);//檢查用
     print(a,x,y);//呼叫函式
     return 0;
}

留言