使用指针复制数组:ArrayCopy函数修改后外部数组未更新问题
std::array指针复制函数的问题修复
问题根源
你遇到的问题是函数参数传递错误:如果ArrayCopy接收的array2是按值传递的std::array,函数内部操作的只是原数组的临时副本——哪怕你在函数里把值复制进去,副本销毁后外部的array2根本不会被修改,所以外部打印还是初始的全0。
正确实现(指针版)
要通过指针实现并修改外部数组,需要把array2的指针传入函数,直接操作原数组的内存:
#include <iostream> #include <array> template <size_t N> void ArrayCopy(const std::array<int, N>& src_arr, std::array<int, N>* dest_arr) { // 获取两个数组的首元素指针 const int* src_ptr = src_arr.data(); int* dest_ptr = dest_arr->data(); // 指针遍历完成复制 for (size_t i = 0; i < N; ++i) { *(dest_ptr + i) = *(src_ptr + i); } } int main() { std::array<int, 5> array1; std::array<int, 5> array2 = {0}; // 输入array1的值 for (auto& num : array1) { std::cin >> num; } // 调用函数时传入array2的地址 ArrayCopy(array1, &array2); // 以下代码块不可修改 for (const auto& num : array2) { std::cout << num << " "; } std::cout << std::endl; return 0; }
错误原因解析
你注释掉的无效方案,大概率是采用了值传递的参数形式,比如:
// 错误示例:传值导致修改仅作用于局部副本 template <size_t N> void ArrayCopy(const std::array<int, N>& src_arr, std::array<int, N> dest_arr) { // 内部复制操作仅修改了局部的dest_arr,和外部array2无关 }
这种写法下,函数结束后局部的dest_arr被销毁,外部的array2始终是初始状态,自然打印全0。
测试验证
输入1 2 3 4 5后,程序会输出1 2 3 4 5,完全符合需求。
内容的提问来源于stack exchange,提问作者Faraday12
相关产品推荐
相关产品推荐

