DL1997 2016-12-05 16:09 采纳率: 33.3%
浏览 1165
已采纳

为什么矩阵赋值那每一行的最后一个元素都会和下一行的第一个元素相等而且提前加了2?

#include
#include
using namespace std;
typedef struct MyStruct
{
int *pMat; int row,col;
}MAT,*pMAT;
void 生成矩阵A(MAT &a){
int temp=30;
a.pMat=new int[a.col*a.row];
for(int i=0;i<a.row;i++){
for(int j=0;j<a.col;j++)
{
a.pMat[a.row*i+j]=temp;
temp+=3;
}
temp=temp+2;
}
}
void 生成矩阵B(MAT &a){
int temp=30;
a.pMat=new int[a.col*a.row];
for(int i=0;i<a.row;i++){
for(int j=0;j<a.col;j++)
{
a.pMat[a.row*i+j]=temp;

    }

}

}
void 显示矩阵(char* str,MAT &a){
cout<<*str<<endl;
for(int i=0;i<a.row;i++){
for(int j=0;j<a.col;j++)
{
cout<<a.pMat[a.row*i+j]<<" ";

    }
    cout<<endl;
}

}
void 矩阵相减(MAT &a,MAT&b,pMAT c){
int *arr2=new int[a.col*a.row];
c->pMat=arr2;
for(int i=0;i for(int j=0;j {
c->pMat[i*a.row+j]=a.pMat[i*a.row+j]-b.pMat[i*a.row+j];
}

}

}
void main()
{
int m=3,n=4;
MAT A={0,m,n};
MAT B={0,m,n};
pMAT C=new MAT;
生成矩阵A(A);生成矩阵B(B);
矩阵相减(A,B,C);
显示矩阵("A:",A);
显示矩阵("B:",B);
显示矩阵("C=A-B:",*C);
delete A.pMat;delete B.pMat;
delete C;
system("pause");
}
图片说明

  • 写回答

3条回答 默认 最新

  • 看得到你的人头 2016-12-06 01:36
    关注

    我们可以分析一下,比如在void 生成矩阵A(MAT &a)函数中,赋值语句 a.pMat[a.row*i+j]=temp;
    当i=0时,j = 0,1,2,3,则在pMat中赋值的有pMat[0],pMat[1],pMat[2]和pMat[3];
    当i=1时,j=0,1,2,3,则在pMat中赋值的有pMat[3],pMat[4],pMat[5]和pMat[6];
    这样i=0次的pMat[3]的值被i=1次的pMat[3]覆盖了,也就是你问的问题。
    同样在其他几个函数中也有此问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏