Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递动态数组以在单独的函数中接收输入_C++_Arrays_Structure - Fatal编程技术网

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;icout首先,您不应该尝试在运行时初始化静态构建阵列:
您的实现在这里是错误的:

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,对不起,我以后会处理缩进。