基于临时数组实现数组反转的C++程序错误排查咨询
排查你的数组反转C++代码错误
让我帮你梳理下代码里的问题,这段代码主要有三个关键错误导致反转功能失效:
嵌套循环逻辑完全错误:你在
reverse函数里用了两层嵌套的for循环,外层i从0到9,内层j从9到0。这会导致每次外层循环时,arr[i]会被重复赋值给revarray的所有位置——比如当i=9时,最后一次循环会把arr[9]覆盖掉revarray的所有元素,最终临时数组里全是原数组的最后一个元素,完全达不到反转的效果。正确的做法是用单层循环,直接把原数组的第i个元素对应赋值到临时数组的9-i位置(因为数组下标从0开始,总长度10)。变量名拼写错误:你定义的临时数组叫
revarray,但输出的时候写的是revarray1,这会直接导致编译错误,编译器找不到这个不存在的变量。可选优化:未修改原数组(按需选择):你的
reverse函数只是输出临时数组,如果后续业务需要使用反转后的原数组,当前逻辑无法满足。不过如果只是需要输出反转结果,修正前两个问题就足够。
修正后的代码
#include<iostream> using namespace std; void reverse(int arr[]) { int revarray[10]; // 单层循环实现正确的反转映射 for(int i=0;i<10;i++) { revarray[9 - i] = arr[i]; } // 修正变量名拼写错误 for(int k=0;k<10;k++) { cout<<revarray[k]<<" "; } } int main() { int arr[10]; cout<<"Enter the elements of array"<<endl; for(int i=0;i<10;i++) { cin>>arr[i]; } reverse(arr); return 0; // 补充main函数的标准返回值 }
额外优化:无需临时数组的原地反转
如果想节省内存,可以直接在原数组上进行元素交换,不需要额外的临时数组:
void reverse(int arr[]) { // 只需要循环前5个元素,和对应的后5个元素交换 for(int i=0;i<5;i++) { int temp = arr[i]; arr[i] = arr[9 - i]; arr[9 - i] = temp; } // 输出已经被反转的原数组 for(int k=0;k<10;k++) { cout<<arr[k]<<" "; } }
内容的提问来源于stack exchange,提问作者NoobMaster_69
相关产品推荐
相关产品推荐

