零点柒 2021-01-09 19:16 采纳率: 40%
浏览 260

为什么C语言中不能通过指针变量的交换来完成指针变量所指向的数据的交换?

    本人学生,在完成作业时遇到这个问题:输入三个整数,按由小到大的顺序输出。并且要求使用指针,于是我写了这样的代码

#include<stdio.h>
void swap(int *a,int *b, int *c)
{
    int *i;
    if(*b>*a)
        i=a;
        a=b;
        b=i;
    if(*c>*a)
        i=a;
        a=c;
        c=i;
     if(*c>*b)
         i=b;
        b=c;
        c=i;
}
int main()
{
    int q,w,e;
    int *a,*b,*c;
    scanf("%d,%d,%d",&q,&w,&e);
    a=&q;
    b=&w;
    c=&e;
    swap(a,b,c);
    q=*a;
    w=*b;
    e=*c;
    printf("%d,%d,%d",*a,*b,*c);
    return 0;
}
然而,却行不通,这是为什么?

  • 写回答

7条回答 默认 最新

  • 泡视界 2021-01-11 09:58
    关注

    唉,这上面都没说到点上,让我来给你醍醐灌顶吧

    1. 你这个swap函数交换的是参数里指针的指向,此函数运行完,参数指针就释放了。这相当于你做了交换,然后放弃了结果。

    2. 为啥在swap中不改指针指向,直接改数值就,其结果可以保存下来?

    因为你的变量是在main中定义的,其内存的销毁需要在main才会进行,所以你传指针到swap中,利用指针交换他们的值,值保存在指定的内存中,swap结束,内存没释放,这就保存下来了。

    3. 你可能有个误区,认为只要用指针做参数就可以保留修改结果,这个想法是不准确的,用指针传递时,需要对其内容修改,才能保存结果。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog