二维数组只能作为函数实参传递
方法一
int in(int a[][j]);
in(a);
#include<stdio.h>
#define i 3
#define j 3
//输入二维数组信息
int in(int a[][j])
{
printf("请输入二维数组信息:\n");
for(int p=0;p<i;p++)
for(int q=0;q<j;q++)
{
scanf("%d",&a[p][q]);
}
return 0;
}
//输出修改后二维数组信息
int out(int a[][j])
{
a[0][0] = 100;
printf("修改后二维数组信息:\n");
for(int p=0;p<i;p++)
{
for(int q=0;q<j;q++)
{
printf("%d ",a[p][q]);
}
printf("\n");
}
return 0;
}
int main()
{
int a[i][j];
in(a);
out(a);
}
方法二
二维数组的存储是线性存储,可以用数组第一个数的地址作为参数传递,进而推出数组中的其它数。
int in(int *a);
in(&a[0][0]);
#include<stdio.h>
#define i 3
#define j 3
//输入二维数组信息
int in(int *a)
{
printf("请输入二维数组信息:\n");
for(int p=0;p<i;p++)
for(int q=0;q<j;q++)
{
scanf("%d",a+p*j+q);
}
return 0;
}
//输出修改后二维数组信息
int out(int *a)
{
*(a) = 100;
printf("修改后二维数组信息:\n");
for(int p=0;p<i;p++)
{
for(int q=0;q<j;q++)
{
printf("%d ",*(a+p*j+q));
}
printf("\n");
}
return 0;
}
int main()
{
int a[i][j];
in(&a[0][0]);
out(&a[0][0]);
}