如何复制整个数组(不是逐个元素)

时间:2016-05-20 06:40:46

标签: c++ arrays function pointers copy

请参阅下面的代码(和评论)。
我正在尝试制作array = newArray。
在C ++中执行此操作的正确语法是什么?

我试图将数组指向与 newArray 相同的内存位置在 memoryCopy()中,因此将 newArray 复制到数组中,而不必按照我的方式逐个元素地执行 deepcopy的()

#include <iostream>
using namespace std;

void deepCopy(int array[], int size);
void memoryCopy(int *array, int size);
void show(int array[], int size);

int main ()
{
    int array[] = {1,1,1};
    show(array,3); // shows array [] = {1,1,1}
    deepCopy(array, 3);
    show(array,3); // shows array [] = {0,0,0}
    memoryCopy(array, 3);
    show(array,3); // shows array [] = {5,0,0}
    // I need the above to show {5, 5, 5} ^ ^
    // How can I do this in memoryCopy() using pointers?
}

void memoryCopy(int *array, int size)
{
     int newArray[] = {5,5,5};
     // I need to make array = newArray ...
     // ... but without copying it over element by element
     memcpy(array,newArray, 3); // <--???
}

void deepCopy(int array[], int size)
{
    int newArray [] = {0,0,0};
    for (int i = 0; i < size; i++)
        array[i] = newArray[i]; 
}

void show(int array[], int size)
{
    int i;
    cout << "array [] = {";
    for (i = 0; i < size-1; i++)
        cout << array[i] << ",";
    cout << array[i] << "}" << endl;
}

2 个答案:

答案 0 :(得分:1)

如果C ++ 11或更新版本可用,请使用std::array<T,N>而不是C-Style数组。 例如:

std::array<int,3> my_array {1,1,1};
auto new_array=my_array; // deep copy

答案 1 :(得分:-2)

谢谢大家的快速回复! 非常有帮助,你太棒了!

以下是它的工作原理

void shallowCopy(int *array, int size)
{
    int newArray[] = {5,5,5};
    memcpy(array,newArray, 3*sizeof(int)); // <--WORKS
    // thank you Manthan Tilva!
}