二维数组传参全解
第一种方法
#include<stdio.h>
int Sort_Two_Array(int buff[][5],int num)
{
int i=0;int j=0;int temp;
int *pload;
pload=buff[0];
for(i=0;i<num*5;i++)
{
for(j=0;j<num*5-i-1;j++)
{
if(pload[j]>pload[j+1])
{
temp=pload[j];
pload[j]=pload[j+1];
pload[j+1]=temp;
}
}
}
}
int Show_Two_Array(int array[][5],int num)
{
int i=0,j=0;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
printf("%4d",array[i][j]);
}
printf("\n");
}
}
int Initial_Two_Array(int array[][5],int num)
{
int i=0,j=0;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&array[i][j]);
}
printf("\n");
}
}
int main(void)
{
int load[3][5];
Initial_Two_Array(load,3);
Sort_Two_Array(load,3);
Show_Two_Array(load,3);
return 0;
}
第二种方法
#include<stdio.h>
int sort_two_array(int *buff[],int num)
{
int i=0;int j=0;int temp;
int *pload=buff[0];
for(i=0;i<num*5;i++)
{
for(j=0;j<15-i-1;j++)
{
if(pload[j]>pload[j+1])
{
temp=pload[j];
pload[j]=pload[j+1];
pload[j+1]=temp;
}
}
}
}
int initial_two_array(int *array[],int num)
{
int i=0,j=0;
for(i=0;i<num;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",array[i]+j);
}
printf("\n");
}
}
int output_two_array(int *array[],int num)
{
int i=0,j=0;
for(i=0;i<num;i++)
{
for(j=0;j<5;j++)
{
printf("%5d",*(array[i]+j));
}
printf("\n");
}
}
int main(void)
{
int buff[3][5];
int *pload[3]={buff[0],buff[1],buff[2]};
initial_two_array(pload,3);
sort_two_array(pload,3);
output_two_array(pload,3);
return 0;
}
第三种方法
#include<stdio.h>
int sort_two_array(int(*buff)[][5],int num)
{
int i=0;int j=0;int temp;
int *pload= (int*)buff;
for(i=0;i<num*5;i++)
{
for(j=0;j<15-i-1;j++)
{
if(pload[j]>pload[j+1])
{
temp=pload[j];
pload[j]=pload[j+1];
pload[j+1]=temp;
}
}
}
}
int initial_two_array(int (*pbuff)[][5],int num)
{
int i=0,j=0;
int (*pload)[5]=(int(*)[])pbuff;
int *array[]={*(pload+0),*(pload+1),*(pload+2)};
for(i=0;i<num;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",array[i]+j);
}
printf("\n");
}
}
int output_two_array(int (*pbuff)[][5],int num)
{
int i=0,j=0;
int (*pload)[5]=(int(*)[])pbuff;
int *array[]={*(pload+0),*(pload+1),*(pload+2)};
for(i=0;i<num;i++)
{
for(j=0;j<5;j++)
{
printf("%5d",*(array[i]+j));
}
printf("\n");
}
}
int main(void)
{
int buff[3][5];
initial_two_array(&buff,3);
sort_two_array(&buff,3);
output_two_array(&buff,3);
return 0;
}
/*
对二维数组整体地址的处理有两种方法,第一种:强制转化为int(*)型,限定跳转长度为4个byte
第二种:强制转化为int(*)[]型,分割行首地址
*/