lovelysea 发表于 2020-7-1 00:08:52

为什么我数组初始化和不初始化,赋值后结果不一样呢?

在做小甲鱼的课后作业S1E25动动手第0题(https://fishc.com.cn/forum.php?mod=viewthread&tid=74266&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570)
我把矩阵计算的结果储存在了数组c里面,然后发现一个不能理解的事情
c是动态数组,我先把每一个元素初始化为0以后,把计算结果逐个赋值进去了,最后打印得到的结果就跟答案一模一样
但是我要是没有初始化为0,虽然后面也是逐个赋值了,但是打印得到的却是一堆随机数
为什么会出现这种情况呢,初始化和不初始化有什么差别吗,不是最后都被我赋值了吗?

以下是我写的代码:
#include<stdio.h>
int main()
{
        int m,n,p;
        int i,j,k;
        printf("请输入第一个矩阵的尺寸(M*P):");
        scanf("%d*%d",&m,&p) ;
        printf("请输入第二个矩阵的尺寸(P*N):");
        scanf("%d*%d",&p,&n) ;
        printf("请输入第一个矩阵的值:\n");
//        申明
        int a;
        int b;               
//        录入
        for(i=0;i<m;i++)
        {
                for(j=0;j<p;j++)
                {
                        scanf("%d",&a);
                }
        }
        printf("请输入第二个矩阵的值:\n");

        for(i=0;i<p;i++)
        {
                for(j=0;j<n;j++)
                {
                        scanf("%d",&b);
                }
        }
//        结果计算及储存
        int c;
//        初始化
//        for(i=0;i<m;i++)
//        {
//                for(j=0;j<n;j++)
//                {
//                        c=0;
//                }
//        }
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        for(k=0;k<p;k++)
                        {
                                c+=a*b;
                        }
                }
        }
//        打印
        printf("计算结果如下:\n");
        for(i=0;i<p;i++)
        {
                if(i<m)
                {
                        printf("| ");
                        for(j=0;j<p;j++)
                        {
                                printf("%d ",a);
                        }
                        if(i+1==(p+1)/2)
                        {
                                printf("| * | ");                       
                        }
                        else
                        {
                                printf("|   | ");
                        }
                        for(j=0;j<n;j++)
                        {
                                printf("%d ",b);
                        }
                        if(i+1==(p+1)/2)
                        {
                                printf("| = | ");                       
                        }
                        else
                        {
                                printf("|   | ");
                        }
                        for(j=0;j<n;j++)
                        {
                                printf("%d ",c);
                        }
                        printf("|\n");
                }
                else
                {
                        printf("");
                        for(j=0;j<p;j++)
                        {
                                printf("");
                        }
                        printf("    | ");
                        for(j=0;j<n;j++)
                        {
                                printf("%d ",b);
                        }
                        printf("|\n");                                                                       
                }
        }
        return 0;
}

赚小钱 发表于 2020-7-1 00:16:55

本帖最后由 赚小钱 于 2020-7-1 00:18 编辑

但是我要是没有初始化为0,虽然后面也是逐个赋值了,但是打印得到的却是一堆随机数

我只看到了代码 L:47
c+=a*b;

如果这就是 虽然后面也是逐个赋值了

实际上,是先使用,后赋值。谁又能保证,先使用的时候究竟是多少呢。

lovelysea 发表于 2020-7-1 09:33:31

赚小钱 发表于 2020-7-1 00:16
我只看到了代码 L:47

如果这就是 虽然后面也是逐个赋值了


没能理解,代码L:47已经将c赋值了呀,L:51打印的时候打出来的却是随机数诶

赚小钱 发表于 2020-7-1 09:57:27

lovelysea 发表于 2020-7-1 09:33
没能理解,代码L:47已经将c赋值了呀,L:51打印的时候打出来的却是随机数诶

c+=a*b;
等价于
c = c+ a*b;
没问题吧

所以,是先使用,还是先赋值?

chxchxkkk 发表于 2020-7-1 10:22:08

对+=理解还不够深入

lovelysea 发表于 2020-7-3 09:26:43

赚小钱 发表于 2020-7-1 09:57
等价于

没问题吧


哦哦,懂了,果然初始化还是很重要的,之前一直没怎么放心上,谢谢大佬
页: [1]
查看完整版本: 为什么我数组初始化和不初始化,赋值后结果不一样呢?