我有一个函数 foo(int[] nums)
,我理解它本质上等同于 foo(int* nums)
。在 foo
内部,我需要将 nums
指向的数组的内容复制到 范围内声明的一些
。我理解以下内容无效:int[10]
中富
void foo (int[] nums)
{
myGlobalArray = *nums
}
复制数组的正确方法是什么?我应该像这样使用 memcpy:
void foo (int[] nums)
{
memcpy(&myGlobalArray, nums, 10);
}
还是应该使用 for 循环?
void foo(int[] nums)
{
for(int i =0; i < 10; i++)
{
myGlobalArray[i] = nums[i];
}
}
我还缺少第三种选择吗?
最佳答案
是的,第三种选择是使用 C++ 构造:
std::copy(&nums[0], &nums[10], myGlobalArray);
使用任何理智的编译器,它:
- 在大多数情况下应该是最佳的(将在可能的情况下编译为
memcpy()
), - 是类型安全的,
- 当您决定将数据类型更改为非原始数据类型(即它调用复制构造函数等)时,可以优雅地应对,
- 在您决定更改为容器类时优雅地应对。
关于c++ - memcpy vs for 循环 - 从指针复制数组的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4729046/