c++ - memcpy vs for 循环 - 从指针复制数组的正确方法是什么?

标签 c++ arrays pointers copy

我有一个函数 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/

相关文章:

c++ - 使用指针时的核心转储

arrays - 如何在 Swift 中将数组的所有成员初始化为相同的值?

javascript - 从 React Native 的列表中获取唯一的项目?

Python Ctypes 传递 .h 文件中定义的结构指针。

c++ - 使用指针返回值 - 程序崩溃

c++ - 在 Qt 中使用 unity 菜单栏

c++ - 当在 C++11 中使用带有两个声明的 auto 时会发生什么?

c++ - 如何重构这个 while 循环以摆脱 "continue"?

c - C 中变量和数组中的指针取消引用

C++ 指针/列表实现