我想将动态数组传递给函数并接收用户输入。目前,我正在使用以下代码:
#include <iostream>
using namespace std;
struct make
{
int part;
int graph;
int like;
};
int z;
int *p = new int [z];
void inpart( make x[],int *fig)
{
cout << "Input part\n";
cin >> x[*fig].part;
}
void ingraph(make x[],int *tig)
{
cout << "Input graph\n";
cin >> x[*tig].graph;
}
void inlike(make x[],int *gig)
{
cout << "Input like\n";
cin >> x[*gig].like;
}
int main()
{
cout << "Input array count\n";
cin >> z;
make p[z];
for (int i=0; i < z; i++)
{
inpart(p,&z);
ingraph(p,&z);
inlike(p,&z);
}
for (int i=0; i < z; i++)
{
cout << "the result is\n";
cout << p[z].part << ", ";
cout << p[z].graph << ", ";
cout << p[z].like << "\n";
}
}
我对所有结构对象的输入1,1,1应该输出1,1,1。但是,我收到的答案是1,0,2。为什么?
答案 0 :(得分:0)
首先,您不应该尝试在运行时初始化静态内置数组: 您的实现在这里是错误的:
cout<< "Input array count\n";
cin>>z;//initialized in run-time
make p[z]; // wrong, need to be allocated with new
make* example = new make[z]; // Ok!
其次,您试图读取和写入所创建数组的边界。这是不确定的行为。当您创建大小为N的数组时,将分配大块内存,您可以通过索引对其进行访问。在您的情况下,从0到z或[0,z),不包括z。总结起来,您的周期应如下所示:
for (int i = 0; i < z; i++) {
inpart(p,&i);
ingraph(p,&i);
inlike(p,&i);
}
实际上,您在代码中犯了很多错误,但是我觉得您以后继续学习时会明白这一点。