怀疑人生啊!为啥循环给数组赋值会这样?!!
各位大佬,小弟通过给一个变长数组循环赋值时发现,每次内层循环完成后,之前的赋值就会被改变!!!截图如下:
代码部分:
输出部分:
关键代码其实很简单,图片中加了一些语句为了测试用的,为了方便大神判断,下面把关键代码贴出:
#include<stdio.h>
int main()
{
int m,p,i,j,a;
printf("输入第一个数组的大小(m*p):");
scanf("%d*%d",&m,&p);
printf("给第一个数组赋值:\n");
for(i = 0;i< m;i++)
{
for(j =0;j<p;j++)
{
scanf("%d",&a);
}
}
//输出第一个数组
for(i = 0;i< m;i++)
{
for(j =0;j<p;j++)
{
printf("%d",a);
}
printf("\n");
}
return 0;
}
运行这段代码,输入与输出不一致,哪位大神来抢救一下!非常感谢! 换下顺序,先输入m,p的值,再声明变长数组。
int m, p, i, j;
printf("输入第一个数组的大小(m*p):");
scanf("%d*%d", &m, &p);
int a;
printf("给第一个数组赋值:\n");
for (i = 0; i< m; i++)
{
for (j = 0; j<p; j++)
。。。。。。 superbe 发表于 2019-12-14 16:32
换下顺序,先输入m,p的值,再声明变长数组。
int m, p, i, j;
printf("输入第一个数组的大小(m* ...
卧槽,还真是这个问题!这背后有啥解释么?{:10_277:},以前没注意过这个细节! 我的理解,虽然变长数组可以使用变量,但在运行时还是需要先知道大小才能分配内存。如果还没输入的话,可能使用的是m,p的垃圾值吧。
superbe 发表于 2019-12-14 19:48
我的理解,虽然变长数组可以使用变量,但在运行时还是需要先知道大小才能分配内存。如果还没输入的话,可能 ...
我感觉好像还是解释的不到位,即便是垃圾值,也很难解释为啥第一次赋值5个元素没问题,赋值下面5个元素时第一次赋值的元素会变化,而且会和第二次的值一样,这段代码完全执行完毕,4行的元素都有值,而且每行的都是相同的,每次执行都是这个结果,这说明这里存在一种必然,用mp的随机值还是解释不通~ 嗯,你说的对,内部原理我也没搞清楚。
页:
[1]