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

为什么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 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计