无法正确打印数组: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
相关产品推荐
相关产品推荐

