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

How to create a dynamic copy of an array inside a function in C++

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

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

你不能像那样复制数组。

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

您需要复制内容

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

memcpy(array2, array, length);

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

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

array2[]=array[];

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

中声明的标准 C 函数 memcpy

例如,您的函数可能如下所示

#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 ) );