为了实现处理数组的特定函数,我需要创建函数作为参数获取的数组的副本。但是,当我运行代码时出现错误。函数内的这两行有什么问题吗?
void shift(int array[], int length, int offset)
{
int* array2=new int[length];
array2[]=array[];
...
}
答案 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 ) );