將二維陣列傳遞函式(需運用指標陣列)【自我延伸彈性版函式接收】
練習將二維陣列內容傳遞至函式運用,然後利用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;
}
#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;
}
留言
張貼留言