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

数组元素移位函数实现异常:函数内交换生效但原数组未改变

问题分析与解决方案

你的代码无法交换数组元素的核心原因是C语言默认采用值传递:传给mv函数的numbers[0]和numbers[1]是原元素的副本,函数内部交换的只是这两个副本的值,完全不会影响原数组里的元素。

修正方案1:使用指针传递(直接操作变量地址)

通过传递元素的内存地址,让函数直接修改原地址中的值:

#include <stdio.h>

void mv(int *n1, int *n2);

int main()
{
    int numbers[] = { 0, 1 };
    mv(&numbers[0], &numbers[1]); // 传递元素的地址
    printf("%i,%i", numbers[0], numbers[1]);
}

void mv(int *n1, int *n2)
{
    int temp = *n1; // 解引用指针,获取原变量的值
    *n1 = *n2;      // 修改原地址中的值
    *n2 = temp;
}

修正方案2:直接操作数组与索引

让函数接收数组和要交换的元素索引,直接通过数组索引修改原元素:

#include <stdio.h>

void mv(int arr[], int idx1, int idx2);

int main()
{
    int numbers[] = { 0, 1 };
    mv(numbers, 0, 1);
    printf("%i,%i", numbers[0], numbers[1]);
}

void mv(int arr[], int idx1, int idx2)
{
    int temp = arr[idx1];
    arr[idx1] = arr[idx2];
    arr[idx2] = temp;
}

以上两种方案都能实现数组元素的真正交换,运行后都会输出1,0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:07