如何在C ++中的函数内创建数组的动态副本

时间:2015-03-13 08:47:33

标签: c++ arrays dynamic

为了实现处理数组的特定函数,我需要创建函数作为参数获取的数组的副本。但是,当我运行代码时出现错误。函数内的这两行有什么问题吗?

void shift(int array[], int length, int offset)
{
    int* array2=new int[length];
    array2[]=array[];
    ...
}

2 个答案:

答案 0 :(得分:0)

你无法复制那样的数组。

array2和array是内存中的起始地址,因此将它们相互分配是没有意义的。

而是你需要复制内容

这可以做到,例如通过c运行时函数memcpy或使用std :: copy

memcpy(array2, array, length);

std::copy(array, array + length, array2);

答案 1 :(得分:0)

数组没有复制赋值运算符。此外,即使存在这样的运算符,这种语法在任何情况下都是无效的

array2[]=array[];

如果您需要获取数组的副本,则必须逐个元素地复制。例如,您可以使用标头std::copy中声明的标准算法<algorithm>或标头memcpy中声明的标准C函数<cstring>

例如,您的功能可能看起来像

#include <algorithm>

//...

int * shift( int array[], int length, int offset )
{
    int *array2 = new int[length];
    std::copy_n( array + offset, length, array2 );

    return array2;
}

使用memcpy时,复制操作看起来像

#include <cstring>

//...

std::memcpy( array2, array + offset, length * sizeof( int ) );