返回结构数组值

时间:2015-03-21 21:17:48

标签: c++ function struct

所以我写了很长的代码,现在我遇到了一个问题。如何更改结构的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;
}

1 个答案:

答案 0 :(得分:2)

我在你的代码中发现了很多问题。

例如,为什么要分配一个包含5个Players的数组,然后重新分配数组并再次分配数组,具有相同的大小?有什么好处?

您还应该注意到C ++具有按值调用的语义,因此delete[] ZZ = temp行在您调用的函数之外没有任何影响。因此,如果您不想在原地修改参数,而是返回新值,那么该函数应该具有签名void Insertion(Player **Z, int size);Player *Insertion(Player *Z, int size)

使用std::vector建议的评论。我强烈推荐这种方法。如果你需要一个可变大小的容器,std :: vector是最好的选择。

如果您有理由自己进行手动分配(例如家庭作业),则应使用以下策略:除了容量之外,还要保持阵列的大小,以及每当大小大于容量时,分配一个容量增加一倍的新数组,复制内容并解除分配旧数组。