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

为什么C语言循环内调用自定义swap函数无法完成元素交换?

问题根因

你定义的swap函数采用了C语言默认的值传递参数规则:

  • 形参int x、int y是函数内部的局部变量,调用swap(array[j], array[j + 1])时,仅会将两个数组元素的值拷贝给x、y,形参和原数组元素占用完全独立的内存空间。
  • 函数内部对x、y的交换操作仅修改了局部副本的值,函数执行结束后局部变量随栈帧销毁,原数组的元素没有发生任何修改,因此交换逻辑不生效。

直接在循环内写交换逻辑能生效的原因是,操作的是原数组元素对应的内存空间,没有经过参数拷贝环节,修改会直接作用到数组本身。

正确的swap函数实现方案

方案1:传指针实现址传递(C/C++通用)

void swap(int *x, int *y) {
    int tmp = *x;
    *x = *y;
    *y = tmp;
}
// 调用时需传入数组元素的地址
swap(&array[j], &array[j + 1]);

方案2:引用传递(仅C++环境支持)

void swap(int &x, int &y) {
    int tmp = x;
    x = y;
    y = tmp;
}
// 调用方式和原有写法一致
swap(array[j], array[j + 1]);

内容的提问来源于stack exchange,提问作者シアン

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03