wozhihaoluandale 2019-12-12 21:42 采纳率: 66.7%
浏览 619
已采纳

c语言怎样更改指针的指向?求大佬解答!

c语言书上的。。。自己没事做,但是- -!脑子有点懵~~
题目是:三个数字abc比大小。用指针,按从大到小顺序输出。但是不能改变abc原来的值。 (我自己yy的题目,书上交换两个但是我想交换三个应该也可以的吧......结果....,事与愿违,,)
主函数

#include <stdio.h>
int main()
{
    void notexchange(int *,int *,int *);
    int a,b,c,*pa,*pb,*pc;
    printf("请输入三个数字\n");
    scanf("%d%d%d",&a,&b,&c);
    pa=&a;
    pb=&b;
    pc=&c;
    notexchange(pa,pb,pc);
    printf("%o\t%o\t%o\t\n",pa,pb,pc);
    printf("三个数字的大小为\n%d\t%d\t%d\t\n",*pa,*pb,*pc);
    printf("abc的值为:\n%d\t%d\t%d\t\n",a,b,c);
    return 0;
}

对三个数字就行比对

void notexchange(int *pa,int *pb,int *pc){
    void notchange(int *x,int *y);
    if(*pa<*pb)notchange(pa,pb);
    if(*pa<*pc)notchange(pa,pc);
    if(*pb<*pc)notchange(pb,pc);
}

对两个数字的交换

void notchange(int *a,int *b){
    int temp;
    temp=a;
    a=b;
    b=temp;
}

最后的运行结果是如图:
图片说明
我试过了几种不同的交换方式,发现abc的原始值都发生了变化,我的想法是大小顺序排出来了,但是abc的原始值还是不变的。劳犯大佬帮看下这三个方法哪个有问题?感谢!

  • 写回答

2条回答 默认 最新

  • JonathanYTR 2019-12-12 22:18
    关注

    如果想在函数内修改函数外的值,只能通过传入其指针或引用来修改,你要求的是原值不变指针改变,那传入的就应该是指针的指针。

    #include <stdio.h>
    
    void notchange(int* *a,int* *b){
        int* temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void notexchange(int* *pa,int* *pb,int* *pc){
        if(**pa<**pb)notchange(pa,pb);
        if(**pa<**pc)notchange(pa,pc);
        if(**pb<**pc)notchange(pb,pc);
    }
    
    int main() {
        int a,*pa = &a, **ppa = &pa;
        int b,*pb = &b, **ppb = &pb;
        int c,*pc = &c, **ppc = &pc;
    
        printf("请输入三个数字\n");
        scanf("%d%d%d",&a,&b,&c);
    
        notexchange(ppa,ppb,ppc);
    
        printf("%o\t%o\t%o\t\n",pa,pb,pc);
        printf("三个数字的大小为\n%d\t%d\t%d\t\n",*pa,*pb,*pc);
        printf("abc的值为:\n%d\t%d\t%d\t\n",a,b,c);
        return 0;
    }
    

    图片说明

    ide换了吧,用devc++,vs2017都行,vc看着太难受了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图输出问题
  • ¥50 python如何用抖音这个接口输入抖音ID查询用户信息
  • ¥30 关于移动Web网页使用TinyMCE富文本编辑器上传图片后的光标定位、压缩等几个问题如何解决:
  • ¥25 activeMq在同服务器centos8下消费很慢
  • ¥20 为什么zynq CAN IP 无法进入config配置模式,XCan_SelfTest函数失效?
  • ¥15 Pycharm中程序直接运行可以但进入调试报错
  • ¥15 MATLAB动图问题
  • ¥15 有段代码不知道怎么理解,const isToken = (config.headers || {}).isToken === false
  • ¥15 我的显卡支持CUDA最高版本是12.3,这个版本也支持VS 2022 17.0这种情况下如果我想下载CUDA11.8,需要下载旧版本的VS2022吗
  • ¥15 pointnet2包安装