鱼C论坛

 找回密码
 立即注册
查看: 1879|回复: 5

[已解决]怀疑人生啊!为啥循环给数组赋值会这样?!!

[复制链接]
发表于 2019-12-14 14:45:52 | 显示全部楼层 |阅读模式
1鱼币
各位大佬,小弟通过给一个变长数组循环赋值时发现,每次内层循环完成后,之前的赋值就会被改变!!!

截图如下:
代码部分:
11.png

输出部分:
22.png

关键代码其实很简单,图片中加了一些语句为了测试用的,为了方便大神判断,下面把关键代码贴出:
#include<stdio.h>

int main()
{
        int m,p,i,j,a[m][p];

        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[i][j]);
                }
        }

//输出第一个数组

        for(i = 0;i< m;i++)
        {
                for(j =0;j<p;j++)
                {
                        printf("%d",a[i][j]);
                }
                printf("\n");
        }
        return 0;
}

运行这段代码,输入与输出不一致,哪位大神来抢救一下!非常感谢!
最佳答案
2019-12-14 14:45:53
换下顺序,先输入m,p的值,再声明变长数组。
    int m, p, i, j;
    printf("输入第一个数组的大小(m*p):");
    scanf("%d*%d", &m, &p);
    int a[m][p];
    printf("给第一个数组赋值:\n");
    for (i = 0; i< m; i++)
    {
        for (j = 0; j<p; j++)
。。。。。。

最佳答案

查看完整内容

换下顺序,先输入m,p的值,再声明变长数组。 int m, p, i, j; printf("输入第一个数组的大小(m*p):"); scanf("%d*%d", &m, &p); int a[m]; printf("给第一个数组赋值:\n"); for (i = 0; i< m; i++) { for (j = 0; j
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-14 14:45:53 | 显示全部楼层    本楼为最佳答案   
换下顺序,先输入m,p的值,再声明变长数组。
    int m, p, i, j;
    printf("输入第一个数组的大小(m*p):");
    scanf("%d*%d", &m, &p);
    int a[m][p];
    printf("给第一个数组赋值:\n");
    for (i = 0; i< m; i++)
    {
        for (j = 0; j<p; j++)
。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-14 17:28:07 | 显示全部楼层
superbe 发表于 2019-12-14 16:32
换下顺序,先输入m,p的值,再声明变长数组。
    int m, p, i, j;
    printf("输入第一个数组的大小(m* ...

卧槽,还真是这个问题!这背后有啥解释么?,以前没注意过这个细节!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-14 19:48:41 | 显示全部楼层
我的理解,虽然变长数组可以使用变量,但在运行时还是需要先知道大小才能分配内存。如果还没输入的话,可能使用的是m,p的垃圾值吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-15 08:07:27 | 显示全部楼层
superbe 发表于 2019-12-14 19:48
我的理解,虽然变长数组可以使用变量,但在运行时还是需要先知道大小才能分配内存。如果还没输入的话,可能 ...

我感觉好像还是解释的不到位,即便是垃圾值,也很难解释为啥第一次赋值5个元素没问题,赋值下面5个元素时第一次赋值的元素会变化,而且会和第二次的值一样,这段代码完全执行完毕,4行的元素都有值,而且每行的都是相同的,每次执行都是这个结果,这说明这里存在一种必然,用mp的随机值还是解释不通~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-15 14:27:40 | 显示全部楼层
嗯,你说的对,内部原理我也没搞清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表