程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++ 指針-為什麼矩陣賦值那每一行的最後一個元素都會和下一行的第一個元素相等而且提前加了2?

c++ 指針-為什麼矩陣賦值那每一行的最後一個元素都會和下一行的第一個元素相等而且提前加了2?

編輯:編程解疑
為什麼矩陣賦值那每一行的最後一個元素都會和下一行的第一個元素相等而且提前加了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");
}
圖片說明

最佳回答:


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

DL1997
qq_27587417
DL1997
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved