用int a[3][3],和int a[3][3]={0}为什么结果会不一样

hamity 2017-10-15 09:16:46
一道矩阵相乘的题
#include<stdio.h>
int main()
{
int a[3][3]={0};
int b[3][3]={0};
int c[3][3]={0};
int i,j,k;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&b[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(j==2)
printf("%d\n",c[i][j]);
else
printf("%d ",c[i][j]);
}
return 0;
}
能够得到正确结果
但是如果把数组定义换成int a[3][3]就得不到正确答案
...全文
710 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33655727 2017-10-16
  • 打赏
  • 举报
回复
a和b是scanf输入赋值,不初始化也没事。c没有初始化。里面是垃圾值,不是0
自信男孩 2017-10-16
  • 打赏
  • 举报
回复
a和b数组可以不初始化,但是c数组必须要初始化。数组不初始化就是随机值,随机值加上a和b的值,就是不确定了。 a和b数组从终端输入,即使不初始化,是随机值,但是会被终端输入的数据覆盖。
OldHello 2017-10-16
  • 打赏
  • 举报
回复
2楼 +1
开源学开源 2017-10-16
  • 打赏
  • 举报
回复
若若的说一句不管你怎么换都行,不会影响结果!只要你的输入正确就行了!你的a,b数组都是有赋值操作的;我刚刚试了你说的问题,int a[3][3];与int a[3][3]={0}是一样的输出。
ilovepc 2017-10-16
  • 打赏
  • 举报
回复
局部动态变量要赋值,否则为随机数
pgao02 2017-10-16
  • 打赏
  • 举报
回复
应该是没有初始化。单步运行一下看一下拿到的都是什么值
勤奋的执着 2017-10-16
  • 打赏
  • 举报
回复
2楼 +2
赵4老师 2017-10-16
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
大米粥哥哥 2017-10-15
  • 打赏
  • 举报
回复
c数据 += 要赋初值吧

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧