这是一个实现矩阵相乘结果的C++程序,用了动态二维数组的申请,怎么输出结果老是乱码?莫非问题出在动态数组申请中,其作用域的局限性吗?高手赐教,谢谢!

Iwillknow 2012-04-29 10:16:10
这是我打得程序:
#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;
double **a,**b,**c;
void multimatrix(double **&Array1,int row1,int col1,
double **&Array2,int row2,int col2,
double **&Array3,int row3,int col3);
int main()
{int i,j,m,n;
cout<<"the col of matrix A must equal to the row of matrix B:"<<endl;
cout<<" PLease input the row and col of matrix A:\n";
cout<<"A's row= ";cin>>i;
cout<<"A's col= ";cin>>j;
cout<<"B's row= ";cin>>m;
cout<<"B's col=";cin>>n;
if(j!=m) abort();
a=new double*[i];
b=new double*[m];
c=new double*[i];
for(int s1=0;s1<i;s1++)
a[s1]=new double[j];
for(int s2=0;s2<m;s2++)
b[s2]=new double[n];
for(int s3=0;s3<i;s3++)
c[s3]=new double[n];
cout<<"Please input A:\n";
for(int p1=0;p1<i;p1++)
for(int p2=0;p2<j;p2++)
cin>>a[p1][p2];
cout<<"Please input B:\n";
for(int p3=0;p3<m;p3++)
for(int p4=0;p4<n;p4++)
cin>>b[p3][p4];
multimatrix(a,i,j,b,m,n,c,i,n);
cout<<"The C is:\n";
for(int t1=0;t1<i;t1++)
{
for(int t2=0;t2<n;t2++)
cout<<c[t1][t2]<<" ";
cout<<endl;
}
}
void multimatrix(double **&Array1,int row1,int col1,
double **&Array2,int row2,int col2,
double **&Array3,int row3,int col3)
{
for(int k1=0;k1<row3;k1++)
for(int k2=0;k2<col3;k2++)
{
for(int k3=0;k3<col1;k3++)
Array3[k1][k2]+=Array1[k1][k3]*Array2[k3][k2];
}
}
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Iwillknow 2012-04-30
  • 打赏
  • 举报
回复
是啊,冠以static后编译器就自动初始化为0,可是只是在二级指针前加static行不通,这是为什么?
hen_hao_ji 2012-04-30
  • 打赏
  • 举报
回复
编译器会自己初始化这个数组为0。
[Quote=引用 6 楼 的回复:]
你好,你是不是以为我提的是一个矛盾的问题,静态和动态本来就是矛盾的。可是冠以static的数组c++会自动将个元素初始化为0
[/Quote]
Iwillknow 2012-04-29
  • 打赏
  • 举报
回复
你好,你是不是以为我提的是一个矛盾的问题,静态和动态本来就是矛盾的。可是冠以static的数组c++会自动将个元素初始化为0
Iwillknow 2012-04-29
  • 打赏
  • 举报
回复
你一说确实是这样!~那如果我把那个存放数组申请为静态数组,岂不是能达到同样的效果,我把它的二级指针定义为static double **c,可是还是乱码.~请教怎么申请静态的动态二维数组,并阐述原因!!万分感谢!!
hen_hao_ji 2012-04-29
  • 打赏
  • 举报
回复
你申请好内存,但内存中的数据不是 0啊,你要清0才行;
Array3[k1][k2]+=Array1[k1][k3]*Array2[k3][k2]; 不清0相加数据就出错

[Quote=引用 3 楼 iwillknow 的回复:]
你能跟我说为什么吗?我不是已经在主函数中申请好数组了吗?Array3[k1][k2]=0的赋值的作用是什么?谢谢!
[/Quote]
Iwillknow 2012-04-29
  • 打赏
  • 举报
回复
你能跟我说为什么吗?我不是已经在主函数中申请好数组了吗?Array3[k1][k2]=0的赋值的作用是什么?谢谢!
hen_hao_ji 2012-04-29
  • 打赏
  • 举报
回复

void multimatrix(double **&Array1,int row1,int col1,
double **&Array2,int row2,int col2,
double **&Array3,int row3,int col3)
{
for(int k1=0;k1<row3;k1++)
for(int k2=0;k2<col3;k2++)
{
Array3[k1][k2] = 0; //赋值0
for(int k3=0;k3<col1;k3++)
Array3[k1][k2]+=Array1[k1][k3]*Array2[k3][k2];
}
}
hen_hao_ji 2012-04-29
  • 打赏
  • 举报
回复

void multimatrix(double **&Array1,int row1,int col1,
double **&Array2,int row2,int col2,
double **&Array3,int row3,int col3)
{
for(int k1=0;k1<row3;k1++)
for(int k2=0;k2<col3;k2++)
{
Array3[k1][k2] = 0; //赋值0
for(int k3=0;k3<col1;k3++)
Array3[k1][k2]+=Array1[k1][k3]*Array2[k3][k2];
}
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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