C++ 传递动态数组以在单独的函数中接收输入
我希望将动态数组传递给函数并接收用户输入。目前我正在使用以下代码:C++ 传递动态数组以在单独的函数中接收输入,c++,arrays,structure,C++,Arrays,Structure,我希望将动态数组传递给函数并接收用户输入。目前我正在使用以下代码: #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\
#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";
}
}
#包括
使用名称空间std;
结构制造
{
内部部分;
整数图;
int-like;
};
intz;
int*p=新的int[z];
无效输入部分(使x[],int*图)
{
cout>x[*图].零件;
}
无效ingraph(使x[],int*tig)
{
cout>x[*tig]。图形;
}
无效inlike(使x[],int*gig)
{
cout>x[*gig].like;
}
int main()
{
cout>z;
使p[z];
对于(int i=0;i cout首先,您不应该尝试在运行时初始化静态构建阵列:
您的实现在这里是错误的:
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!
cout>z;//在运行时初始化
使p[z];//错误,需要分配新的
make*example=newmake[z];//好的!
其次,您正在尝试读取和写入所创建数组的边界之外。这是未定义的行为。当您创建大小为N的数组时,将分配内存块,您可以通过索引访问该内存块。在您的情况下,从0到z或[0,z],不包括z。总之,您的循环应如下所示:
for (int i = 0; i < z; i++) {
inpart(p,&i);
ingraph(p,&i);
inlike(p,&i);
}
for(int i=0;i
实际上,你在代码中犯了很多错误,但我觉得你在以后继续学习时会明白这一点。在引用中使用std::vector
,然后忘记所有其他内容。这个问题中显示的代码缺少任何形式的逻辑缩进,这使得它大部分不可读。如果你想寻求其他人的帮助,您至少可以花一点时间用逻辑缩进格式化代码,以便其他人能够真正阅读。@SamVarshavchik,对不起,我以后会处理缩进。