结构体变量及其指针使用时的小问题

关于实验程序结构体使用中遇到的一个小问题,在此记录一下

问题描述

使用结构体的过程中,发现使用结构体变量和结构体指针程序的执行结果不一致
结构体及相关函数定义:

struct Matrix
{
	int VertexNum,ArcNum;
	int Arc[MaxSize][MaxSize];
	ElemType vertex[MaxSize];
};

//图邻接矩阵构造函数定义
int MGraph1(Matrix &MG,ElemType a[],int n,int e)
{
	MG.VertexNum=n;	//顶点个数赋值
	MG.ArcNum=e;		//边的条数赋值
	for(int i=0;i<MG.VertexNum;i++)	//储存顶点信息
		MG.vertex[i]=a[i];
	for(int x=0;x<MG.VertexNum;x++)		//初始化邻接矩阵
		for(int y=0;y<MG.VertexNum;y++)
			MG.Arc[x][y]=0;
	for(int j=0;j<MG.ArcNum;j++)	//储存边的信息
	{
		cin>>x>>i;		//输入边依附顶点的信息
		MG.Arc[x][i]=1;	//置有边的标志
		MG.Arc[i][x]=1;
	}
	return 0;
}
int MGraph2(Matrix *&MG,ElemType a[],int n,int e)
{
	MG->VertexNum=n;	//顶点个数赋值
	MG->ArcNum=e;		//边的条数赋值
	for(int i=0;i<MG->VertexNum;i++)	//储存顶点信息
		MG->vertex[i]=a[i];
	for(int x=0;x<MG->VertexNum;x++)		//初始化邻接矩阵
		for(int y=0;y<MG->VertexNum;y++)
			MG->Arc[x][y]=0;
	for(int j=0;j<MG->ArcNum;j++)	//储存边的信息
	{
		cin>>x>>i;		//输入边依附顶点的信息
		MG->Arc[x][i]=1;	//置有边的标志
		MG->Arc[i][x]=1;
	}
	return 0;
}
  • 定义结构体变量并调用函数
Matrix MG;
MGraph1(MG,s,4,4);

描述:调用该函数后程序正常执行

  • 定义结构体指针并调用函数
Matrix *MG;
MGraph2(MG,s,4,4);

描述:调用该函数后程序执行到该函数的第一个语句便异常退出

解决方案

查阅资料后,发现结构体变量及结构体指针的使用不太一样。结构体变量定义后可以直接使用,而结构体指针需要先给它分配空间后才能使用。更改后的程序如下:

Matrix *MG;
MG=new Matrix;
MGraph2(MG,s,4,4);

然后成功解决该问题~~~

参考资料:

结构体使用与指针的理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值