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

无法正确打印数组:C++数组拷贝后打印结果不符求助

数组打印结果不符合预期的问题分析与解决

问题根源

在C++中,数组作为函数参数传递时会退化为指针,这意味着你在printArray函数里用sizeof(arr)获取的是指针的字节大小,而非数组的实际元素个数。以64位系统为例,指针大小是8字节,int类型是4字节,所以sizeof(arr)/sizeof(int)计算结果为2,循环仅执行2次,自然只打印前两个元素。

解决方法

方法1:手动传递数组长度

修改printArray函数,新增一个参数接收数组的实际长度:

#include <iostream>

using namespace std;

void printArray(int arr[], int arrayLength){
    cout << "[";
    for(int i=0; i<arrayLength; i++){
        cout << arr[i] << " ";
    }
    cout << "]";
}

int main(){
    int curry[6] = {0, 1, 2, 3, 4, 5};
    int lebron[6];

    for(int i=0; i<6; i++){
        lebron[i] = curry[i];
    }

    printArray(lebron, 6); // 传入数组长度
}

方法2:使用模板函数自动推导数组大小

利用C++模板的特性,编译期自动推导数组的大小,避免手动传递长度的麻烦:

#include <iostream>

using namespace std;

template <size_t N>
void printArray(int (&arr)[N]){ // 用引用传递数组,避免退化
    cout << "[";
    for(size_t i=0; i<N; i++){
        cout << arr[i] << " ";
    }
    cout << "]";
}

int main(){
    int curry[6] = {0, 1, 2, 3, 4, 5};
    int lebron[6];

    for(int i=0; i<6; i++){
        lebron[i] = curry[i];
    }

    printArray(lebron); // 直接传数组,模板自动推导大小
}

方法3:使用标准库容器(推荐现代C++写法)

用std::vector替代普通数组,它可以直接获取元素个数,且支持直接拷贝,无需手动循环赋值:

#include <iostream>
#include <vector>

using namespace std;

void printArray(const vector<int>& arr){
    cout << "[";
    for(int num : arr){
        cout << num << " ";
    }
    cout << "]";
}

int main(){
    vector<int> curry = {0, 1, 2, 3, 4, 5};
    vector<int> lebron = curry; // 直接拷贝整个容器

    printArray(lebron);
}

效果验证

修改后运行代码,输出将符合预期:

[0 1 2 3 4 5 ]

内容的提问来源于stack exchange,提问作者109

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:27