求解释个代码谢谢
#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;
} 第一个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这个指针所指向的地方 临时号 发表于 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: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 临时号 发表于 2022-7-9 17:36
当a=3,b=2,c=1时
因为a>b成立
所以首先,将pa所指向的地址的值赋值给了t,此时t=3,*pa=3,*pb=2,*pc=1
非常感谢
页:
[1]