所以我写了很长的代码,现在我遇到了一个问题。如何更改结构的arrray值并将它们恢复为main函数。 我试图做的这个功能是:在第一个阵列点(即0)插入一个新值。整个循环释放Z [0]并且工作正常。但我不知道如何将整个CHANGED结构数组返回到主程序。怎么做?
谢谢。 附:抱歉,因为我的英语不好。
以下是代码的必要部分:
void insertion(Player Z[], int size); //declaration of the funcion
...
int main()
{
int size=5;
Player *Z = new Player[size];
Insertion(Z, size); //calling the function
...
}
void Insertion(Player Z[], int size) //function
{
size++;
Player* temp = new Player[size];
for(int i=0;i<=size-1;i++)
{
temp[i+1]=Z[i];
}
delete [] Z;
Z = temp;
cin>>Z[0].name;
cin>>Z[0].surname;
}
答案 0 :(得分:2)
我在你的代码中发现了很多问题。
例如,为什么要分配一个包含5个Players的数组,然后重新分配数组并再次分配数组,具有相同的大小?有什么好处?
您还应该注意到C ++具有按值调用的语义,因此delete[] Z
和Z = temp
行在您调用的函数之外没有任何影响。因此,如果您不想在原地修改参数,而是返回新值,那么该函数应该具有签名void Insertion(Player **Z, int size);
或Player *Insertion(Player *Z, int size)
。
使用std::vector
建议的评论。我强烈推荐这种方法。如果你需要一个可变大小的容器,std :: vector是最好的选择。
如果您有理由自己进行手动分配(例如家庭作业),则应使用以下策略:除了容量之外,还要保持阵列的大小,以及每当大小大于容量时,分配一个容量增加一倍的新数组,复制内容并解除分配旧数组。