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

为何C语言中void类型swap函数无法实现整数交换?

解决C语言swap函数无法交换整数的问题

你的问题根源在于函数参数的传递方式:当前swap函数用的是值传递,调用swap(x,y)时,程序会把main里x、y的值复制一份,传给函数里的形参x和y。函数内部交换的只是这两个副本,main函数里的原始变量完全没被改动,所以输出还是原来的值。

要解决这个问题,需要用地址传递(指针),让函数直接操作main里的原始变量。修改后的代码如下:

#include<stdio.h>

void swap(int *x, int *y){
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

int main(void){
    int x,y;
    printf("Enter X: \n");
    scanf("%d",&x);

    printf("Enter Y: \n");
    scanf("%d",&y);

    swap(&x, &y); // 传入变量的地址,让函数能找到并修改原始变量

    printf("%d , %d",x,y);
    return 0;
}

关键改动说明:

  • 把swap函数的形参改成int *x和int *y(指针类型),用来接收变量的地址
  • 函数内部用*x、*y来访问指针指向的原始变量,这样交换的就是main里的x和y本身
  • 调用swap时,传入&x和&y(取地址运算符),把变量的地址传给函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:20:04