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

C++中使用Void和指针交换数组的代码错误排查请求

问题分析与修复方案

首先看你的代码,核心问题出在swap函数的数组索引使用上,另外还有一些小细节可以优化,让我一步步给你拆解:

主要错误点

  • 数组越界访问:在swap函数的循环里,你用了SIZE作为数组下标(array1[SIZE]),但数组的合法下标范围是0到SIZE-1(因为SIZE=5,所以下标是0-4)。访问array1[5]属于越界操作,会触发未定义行为——程序可能崩溃、输出乱码或者出现其他奇怪的结果,这是导致程序无法正常运行的根本原因。
  • 硬编码的循环条件:showValues和swap里的循环都写了i < 5,如果以后修改SIZE的值,这些地方都要手动改,不如直接用SIZE常量,让代码更灵活。

修正后的完整代码

#include <iostream>
#include <iomanip>
using namespace std;

const int SIZE = 5;
void showValues(int[], int[]);
void swapArrays(int[], int[]); // 换个名字避免和std::swap冲突(可选,但更安全)

int main() {
    int array1[SIZE] = {10,20,30,40,50};
    int array2[SIZE] = {60,70,80,90,100};

    cout << "=== 交换前 ===" << endl;
    showValues(array1, array2);
    
    swapArrays(array1, array2);
    
    cout << "\n=== 交换后 ===" << endl;
    showValues(array1, array2);

    return 0;
}

void showValues(int array1[], int array2[]){
    cout << " Array 1 is: ";
    for (int i = 0; i < SIZE; ++i) { // 用SIZE代替硬编码的5
        cout << array1[i] << " ";
    }
    cout << "\n Array 2 is: ";
    for (int i = 0; i < SIZE; ++i) { // 同上
        cout << array2[i] << " ";
    }
    cout << endl;
}

void swapArrays(int array1[], int array2[]) {
    int temp;
    for(int i = 0; i < SIZE; ++i) {
        temp = array1[i]; // 用循环变量i作为下标,访问合法的数组元素
        array1[i] = array2[i];
        array2[i] = temp;
    }
}

代码修改说明

  1. 修复数组越界:把swap函数里的array1[SIZE]改成array1[i],array2[SIZE]改成array2[i],这样每次循环都会交换两个数组对应位置的元素。
  2. 替换硬编码:所有循环条件里的5都换成SIZE,增强代码的可维护性。
  3. 优化函数命名:把自定义的swap改成swapArrays,因为你用了using namespace std;,标准库的std::swap可能和你的自定义函数产生命名冲突(虽然这里参数不同是重载,但换名字更清晰)。
  4. 调整输出逻辑:把交换后的输出放到main函数里调用showValues,让swapArrays只负责交换逻辑,单一职责更清晰。

运行结果

=== 交换前 ===
 Array 1 is: 10 20 30 40 50 
 Array 2 is: 60 70 80 90 100 

=== 交换后 ===
 Array 1 is: 60 70 80 90 100 
 Array 2 is: 10 20 30 40 50 

这样修改后,程序就能正常运行,正确交换两个数组的所有元素啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:43:21