yjx20060525 发表于 2022-7-9 00:18:20

求解释个代码谢谢

#include <stdio.h>

int main(void)
{
      int a, b, c, t;
      int *pa, *pb, *pc;
      
      printf("请输入三个数:");
      scanf("%d%d%d", &a, &b, &c);
      
      pa = &a;
      pb = &b;
      pc = &c;
      
      if (a > b)
      {
                t = *pa;
                *pa = *pb;
                *pb = t;
      }
      
      if (a > c)
      {
                t = *pa;
                *pa = *pc;
                *pc = t;
      }
      
      if (b > c)
      {
                t = *pb;
                *pb = *pc;
                *pc = t;
      }//这三个if语句里面的内容没有看懂,求解释
      
      printf("%d <= %d <= %d\n", *pa, *pb, *pc);
      printf("%d <= %d <= %d\n", a, b, c);
      
      return 0;
}

临时号 发表于 2022-7-9 00:38:38

第一个if语句:
如果a>b
那么,首先,把pa这个指针所指向的值拿出来赋值给t
然后,将pb这个指针所指向的值拿出来放到pa这个指针所指向的地方
然后,将t放到pb这个指针所指向的地方
第二个if语句:
如果a>c
那么,首先,把pa这个指针所指向的值拿出来赋值给t
然后,将pc这个指针所指向的值拿出来放到pa这个指针所指向的地方
然后,将t放到pc这个指针所指向的地方
第三个if语句:
如果b>c
那么,首先,把pb这个指针所指向的值拿出来赋值给t
然后,将pc这个指针所指向的值拿出来放到pb这个指针所指向的地方
然后,将t放到pc这个指针所指向的地方

yjx20060525 发表于 2022-7-9 17:06:57

临时号 发表于 2022-7-9 00:38
第一个if语句:
如果a>b
那么,首先,把pa这个指针所指向的值拿出来赋值给t


想追问一下,如果我输入a=3,b=2,c=1时,这三个if语句都要执行一遍,pa,pb,pc各被赋值了两遍,那为什么最终结果仍然正确,可以解释下输入a=3,b=2,c=1程序的判断过程吗,谢谢

临时号 发表于 2022-7-9 17:36:07

本帖最后由 临时号 于 2022-7-9 17:37 编辑

当a=3,b=2,c=1时
因为a>b成立
所以首先,将pa所指向的地址的值赋值给了t,此时t=3,*pa=3,*pb=2,*pc=1
然后,将pb所指向的地址的值放到了pa所指向的地方,此时*pb=2,*pa=2,*pc=1,t=3
然后,将t的值放到pb所指向的地方,此时t=3,*pb=3,*pa=2,*pc=1
第一个if执行后,此时*pa=2,*pb=3,*pc=1,t=3
因为a>c成立
所以首先,将pa所指向的地址的值赋值给了t,此时t=2,*pa=2,*pb=3,*pc=1
然后,将pc所指向的地址的值放到了pa所指向的地方,此时*pc=1,*pa=1,*pb=3,t=2
然后,将t的值放到pc所指向的地方,此时t=2,*pc=2,*pa=1,*pb=3
第二个if执行后,此时*pa=1,*pb=3,*pc=2,t=2
因为b>c成立
所以首先,将pb所指向的地址的值赋值给了t,此时t=3,*pb=3,*pa=1,*pc=2
然后,将pc所指向的地址的值放到了pb所指向的地方,此时*pc=2,*pb=2,*pa=1,t=3
然后,将t的值放到pc所指向的地方,此时t=3,*pc=3,*pb=2,*pa=1
第三个if执行后,此时*pa=1,*pb=2,*pc=3,t=3
所以输出:
1 <= 2 <= 3

yjx20060525 发表于 2022-7-9 21:32:22

临时号 发表于 2022-7-9 17:36
当a=3,b=2,c=1时
因为a>b成立
所以首先,将pa所指向的地址的值赋值给了t,此时t=3,*pa=3,*pb=2,*pc=1


非常感谢
页: [1]
查看完整版本: 求解释个代码谢谢