为什么我数组初始化和不初始化,赋值后结果不一样呢?
在做小甲鱼的课后作业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:18 编辑
但是我要是没有初始化为0,虽然后面也是逐个赋值了,但是打印得到的却是一堆随机数
我只看到了代码 L:47
c+=a*b;
如果这就是 虽然后面也是逐个赋值了
实际上,是先使用,后赋值。谁又能保证,先使用的时候究竟是多少呢。 赚小钱 发表于 2020-7-1 00:16
我只看到了代码 L:47
如果这就是 虽然后面也是逐个赋值了
没能理解,代码L:47已经将c赋值了呀,L:51打印的时候打出来的却是随机数诶 lovelysea 发表于 2020-7-1 09:33
没能理解,代码L:47已经将c赋值了呀,L:51打印的时候打出来的却是随机数诶
c+=a*b;
等价于
c = c+ a*b;
没问题吧
所以,是先使用,还是先赋值? 对+=理解还不够深入 赚小钱 发表于 2020-7-1 09:57
等价于
没问题吧
哦哦,懂了,果然初始化还是很重要的,之前一直没怎么放心上,谢谢大佬
页:
[1]