#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");
}
我們可以分析一下,比如在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]覆蓋了,也就是你問的問題。
同樣在其他幾個函數中也有此問題。