使用指针将一个数组的元素复制到另一个数组的函数

匿名假人

我正在学习一本名为C++ 无所畏惧的教科书(我是自学的,仍处于初学者阶段)。我完全被指针一章中的一个练习难住了。这是练习的确切措辞:

"编写并测试一个copy_array将一个int数组的内容复制到另一个相同大小的数组的函数。该函数应采用两个指针参数。循环内部的操作应如下所示:

*p1 = *p2;
p1++;
p2++;

我能够在没有错误的情况下构建我的程序(哇),但我的问题是,当我在调用copy_array函数后将第二个数组打印到屏幕上时,结果是第二个数组的原始元素。我相信我的问题出在我的copy_array职能上。我花了过去 2 个小时在互联网上搜索类似的练习及其解决方案,但仍然被难住了。我确实看到了另一个与我的类似的 Stack Overflow 问题,似乎该解决方案与创建要逐步执行的指针副本有关,因此 2 个指针的位置不会改变或类似的东西......我尽我最大的努力去理解和想象如何做到这一点,但我仍然被难住了。啊。对这个问题的任何帮助将不胜感激!

#include <iostream>
using namespace std;


int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[10] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

void copy_array(int* p1, int* p2, int n)
{
    while (n-- > 0)
    {
        *p1 = *p2;
        p1++;
        p2++;       
    }
}

int main()
{
    cout << "Contents of Array 1 before..." << endl; 

    for (int i = 0; i < 10; i++)
    {
        cout << arr1[i] << " " << endl; 
    }

    cout << "Contents of Array 2 before..." << endl;

    for (int i = 0; i < 10; i++)
    {
        cout << arr2[i] << " " << endl; 
    }

    copy_array(arr1, arr2, 10);

    cout << "Contents of Array 2 after..." << endl; 

    for (int i = 0; i < 10; i++)
    {
        cout << arr2[i] << " " << endl; 
    }
    return 0;
}
大卫·莱杰

线路:

*p1 = *p2;

*p1 “取消引用” p1 指针,这意味着分配给 this 的任何内容都将分配给 p1 指示的地址。

*p2 “取消引用” p2 指针,对该位置的任何读取都将读取存储在 p2 指示的地址处的值。

p1++; 

这将地址指针增加 1,这并不意味着 1 个字节,这意味着存储在 p1 中的大小增加 1,在这种情况下它是一个 int,所以它通过 sizeof(int) 增加地址。

p2++; // Does the same as p1++.

因此,在这种情况下,您分配给 p1 数组,而不是分配给 p2 数组。

*p1 = *p2;

意思是:将地址p2中存储的值复制到地址p1中。p1 是变化的内存。

虽然不是完全类型安全的 memcpy 有一些手动功能可能没有的优点。memcpy 最终会生成几乎最佳的代码,它真的很棒。我希望我已经正确解释了您的问题, memcpy 需要指针。

template <typename T>
bool safe_copy(T * dest, size_t dest_count, const T * source, size_t source_count)
{
    auto const dest_bytes = sizeof(dest[0]) * dest_count;
    auto const source_bytes = sizeof(source[0]) * source_count;
    //
    //
    if (dest_bytes < source_bytes) return false;
    //
    //
    return memcpy( (void*)dest, (const void *)source, sizeof(source[0]) * source_count ) == dest;
}

请不要因为本文列出的原因禁止使用 memcpy 的供应商:https : //docs.microsoft.com/en-us/previous-versions/bb288454(v=msdn.10)

通常建议使用 memcpy_s 代替,但这并不总是可用。

您可以在此处查看我提出的解决方案:https : //onlinegdb.com/HJlybSLVH

编辑:正如下面的评论中所讨论的,标准的 C++ 方法正在使用

std::copy
std::copy_n
std::copy_if
std::copy_backward
std::reverse_copy
std::replace_copy
std::replace_copy_if
std::unique_copy

一个很好的资源在这里:

https://en.cppreference.com/w/cpp/header/algorithm

这些实现了同样的事情,但被推广到迭代器的概念。因为您询问了指针,所以我发布了关于仅处理指针的 memcpy。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将一个数组值复制到另一个数组

来自分类Dev

在C中将一个数组的元素复制到另一个

来自分类Dev

无法将一个数组的内容复制到另一个数组中...获取奇怪的数字

来自分类Dev

汇编-内联汇编-从一个数组复制到另一个数组?

来自分类Dev

如何将数组键复制到另一个数组,并用空数组替换值?

来自分类Dev

如何使用某种逻辑将数组复制到另一个数组

来自分类Dev

将所有数组元素复制到C中的另一个数组中

来自分类Dev

将子数组复制到另一个数组,同时更改它们?

来自分类Dev

在CPU上使用OpenCL将一个数组复制到另一个数组比C ++代码慢得多

来自分类Dev

将数组的所有元素复制到指定索引处的另一个数组

来自分类Dev

c指针和数组,将内容复制到另一个数组中

来自分类Dev

将一个数组的索引(被随机挑选然后拼接)复制到另一个数组中,以便我知道它的拼接顺序

来自分类Dev

如何将数组值复制到另一个数组

来自分类Dev

将指针数组值复制到C中另一个数组的末尾

来自分类Dev

如何删除数组中的指定字符并将元素复制到另一个数组

来自分类Dev

如何使用偏移量和剪切将一个数组复制到另一个数组?

来自分类Dev

我正在尝试将一个数组的数据复制到另一个数组

来自分类Dev

将元素从一个数组复制到另一个数组时遇到Javascript问题。额外的方括号,额外的尺寸?

来自分类Dev

php-将值从数组复制到多维数组中的另一个数组

来自分类Dev

将x随机值从一个数组复制到另一个PHP

来自分类Dev

如何使用某种逻辑将数组复制到另一个数组

来自分类Dev

将一个数组的内容复制到另一个数组

来自分类Dev

将循环结构转换为 JSON - 将元素数组复制到另一个数组并返回原始数组时出错

来自分类Dev

如何使用 for 循环将返回对象数组复制到另一个数组中

来自分类Dev

无法在 Angular 5 中将一个数组的内容复制到另一个数组

来自分类Dev

如何将一个数组的元素复制到另一个数组

来自分类Dev

在汇编中将一个数组的内容复制到另一个数组

来自分类Dev

当我将一个数组复制到另一个数组时,为什么两个数组都被修改?

来自分类Dev

如何将数组复制到 UIImages 到另一个数组中?

Related 相关文章

  1. 1

    将一个数组值复制到另一个数组

  2. 2

    在C中将一个数组的元素复制到另一个

  3. 3

    无法将一个数组的内容复制到另一个数组中...获取奇怪的数字

  4. 4

    汇编-内联汇编-从一个数组复制到另一个数组?

  5. 5

    如何将数组键复制到另一个数组,并用空数组替换值?

  6. 6

    如何使用某种逻辑将数组复制到另一个数组

  7. 7

    将所有数组元素复制到C中的另一个数组中

  8. 8

    将子数组复制到另一个数组,同时更改它们?

  9. 9

    在CPU上使用OpenCL将一个数组复制到另一个数组比C ++代码慢得多

  10. 10

    将数组的所有元素复制到指定索引处的另一个数组

  11. 11

    c指针和数组,将内容复制到另一个数组中

  12. 12

    将一个数组的索引(被随机挑选然后拼接)复制到另一个数组中,以便我知道它的拼接顺序

  13. 13

    如何将数组值复制到另一个数组

  14. 14

    将指针数组值复制到C中另一个数组的末尾

  15. 15

    如何删除数组中的指定字符并将元素复制到另一个数组

  16. 16

    如何使用偏移量和剪切将一个数组复制到另一个数组?

  17. 17

    我正在尝试将一个数组的数据复制到另一个数组

  18. 18

    将元素从一个数组复制到另一个数组时遇到Javascript问题。额外的方括号,额外的尺寸?

  19. 19

    php-将值从数组复制到多维数组中的另一个数组

  20. 20

    将x随机值从一个数组复制到另一个PHP

  21. 21

    如何使用某种逻辑将数组复制到另一个数组

  22. 22

    将一个数组的内容复制到另一个数组

  23. 23

    将循环结构转换为 JSON - 将元素数组复制到另一个数组并返回原始数组时出错

  24. 24

    如何使用 for 循环将返回对象数组复制到另一个数组中

  25. 25

    无法在 Angular 5 中将一个数组的内容复制到另一个数组

  26. 26

    如何将一个数组的元素复制到另一个数组

  27. 27

    在汇编中将一个数组的内容复制到另一个数组

  28. 28

    当我将一个数组复制到另一个数组时,为什么两个数组都被修改?

  29. 29

    如何将数组复制到 UIImages 到另一个数组中?

热门标签

归档