关于实验程序结构体使用中遇到的一个小问题,在此记录一下
问题描述
使用结构体的过程中,发现使用结构体变量和结构体指针程序的执行结果不一致
结构体及相关函数定义:
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);
然后成功解决该问题~~~