C语言实参数组与形参数组问题

来源:百度知道 编辑:UC知道 时间:2024/06/12 06:39:13
main()
{
void enter(int ar[],int n,int m);
int a[20][20]={0},n,m,i,j;
printf("enter the N and M:");
scanf("%d%d",&n,&m);
enter(a[0],n,m);
printf("\n");
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf("%3d",a[i][j]);
printf("\n");
}

}
void enter(int ar[],int n,int m)
{
int i,j;
for(i=0;i<n*m;i++)
scanf("%d",&ar[i]);
}
以上程序,无论N和M是多少,只能打印出第一行的数,其余行还是初始值零呢??请高人解答。
不行啊!@ 还是一样~! 那位大侠解救下啊~!在线等啊

这个问题是这样的了,因为你的数组定义的是二维大小是20*20 地址空间已经分配好了,而但你输入的m和n的值小于20的时候,你只是先给第一维赋值,如果输入的数字大于20,在对第二维赋值,但你输入一些小的m和n时,其实二维数组你还没有赋值,他们的值还是你默认给的0啊,而当你用二维数组去读数的时候 a[0][j]的值就是从a[0]开始,所以结果是对的.
但是a[1][j]的地址却是&a[0][0]+4*20,可以看出你并没对那里赋值。
你可以把数组改小一点,如3*3啊,4*4啊什么的然后输入看结果就是对的了
你可以用我的这个程序去看看运行后的结果,你就会明白了:

#include<string.h>
main()
{
void enter(int ar[],int n,int m);
int a[20][20]={0},n,m,i,j;
printf("enter the N and M:");
scanf("%d%d",&n,&m);
enter(a[0],n,m);
printf("\n");
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf("%3d-%d ",a[i][j],&a[i][j]); //打印每个数组元素的地址
printf("\n");
}
system("pause");
}
void enter(int ar[],int n,int m)
{
int i,j;
for(i=0;i<n*m;i++)
scanf("%d",&ar[i]);
for(i=0;i<n*m;i++)
printf("%d ",&ar[i]);//打印地址
printf("\n&q