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

C语言Pass by reference实现交换函数失效问题求助

你的C语言swap函数失效的原因及修正方案

核心错误分析

C语言仅支持值传递,不存在引用传递。你编写的swap函数中,形参a和b是实参指针c、d的副本——你在函数里交换的是这两个副本指针的指向,完全没有触及它们指向的内存中存储的整数数值,所以主函数里的原始变量值不会有任何变化。

正确的数值交换实现

要交换两个整数的数值,你需要通过指针解引用,直接操作它们指向的内存中的值,而不是交换指针变量本身。修正后的代码如下:

#include <stdio.h>
void swap(int *a, int *b){
    int temp;
    // 交换指针指向的内存中的整数
    temp = *a;
    *a = *b;
    *b = temp;
}

int main()
{
    int a = 78;
    int b = 98;
    int *c=&a;
    int *d=&b;
    swap(c,d);
    printf(" a is %d and b is %d \n",*c,*d);

    return 0;
}

额外说明:如果要交换指针本身的指向

如果你的需求是让指针变量c和d互相交换指向(而不是交换它们指向的数值),则需要传递指针的指针(二级指针),因为要修改指针变量的值,必须传入它的地址。示例代码如下:

#include <stdio.h>
void swap_ptr(int **a, int **b){
    int *temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main()
{
    int a = 78;
    int b = 98;
    int *c=&a;
    int *d=&b;
    swap_ptr(&c, &d);
    printf(" c points to %d, d points to %d \n",*c,*d);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:20:53