You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用指针复制数组: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:52:47