有没有大神帮我看看怎么回事?

帅帅哒的中级学徒丶 2016-12-03 07:56:40

#include<iostream>
#include<string>
using namespace std;

typedef struct
{int *pMat;int row,col;}MAT,*pMAT;
void 生成矩阵A(pMAT a)
{

int num=10;
int m=a->row;
int n=a->col;
int *p=new int[m*n];
a->pMat=p;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
p[m*i+j]=num*(i+1)+2*j;

}
}
}
void 显示矩阵(string str,pMAT a)
{
cout<<str<<endl;
int m=a->row;
int n=a->col;
int h=0;
for(int i=0;i<m*n;i++)
{
cout<<a->pMat[i]<<" ";
h++;
if(h==4)
{
cout<<endl;
h=0;
}
}

}
void main()
{
int m=3,n=4;
MAT A={0,m,n},B={0,m,n};
pMAT C=new MAT;
生成矩阵A(&A);显示矩阵("A:",&A);
delete A.pMat;
system("pause");
}
...全文
81 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
知道了 我也发现了 。只有方阵才能这么用 尴尬了 0.0
paschen 版主 2016-12-03
  • 打赏
  • 举报
回复
或者改成; p[n*i+j]=num*(i+1)+2*j;
paschen 版主 2016-12-03
  • 打赏
  • 举报
回复
这样改吧:

void 生成矩阵A(pMAT a)
{

	int num=10;
	int m=a->row;
	int n=a->col;
	int *p=new int[m*n];
	a->pMat=p;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			*p++=num*(i+1)+2*j;

		}
	}
}
paschen 版主 2016-12-03
  • 打赏
  • 举报
回复
for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { p[m*i+j]=num*(i+1)+2*j; } } 这一部分循环中,当i=0 j = 3时,p[m*i+j] = p[3] = 16 之后i = 1, j = 0时,p[m*i+j] = 20 所以后面的循环把之前的16覆盖了
  • 打赏
  • 举报
回复
为什么我调试了 ,数据有丢失啊 a->pMat[3]=16 不见了 直接输出的20

64,654

社区成员

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

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