例10.2输入a和B两个整数,按先大后小的顺序输出a和B。
main()
{
int*p1,*p2,*p,a,B;
scanf("%D,%D",&a,&B);
p1=&a;p2=&B;
if(a<B)
{p=p1;p1=p2;p2=p;}
printf("\na=%D,B=%D\n\n",a,B);
printf("max=%D,min=%D\n",*p1,*p2);
}
运行情况如下:
5,9
a=5,B=9
max=9,min=5
当输入a=5,B=9时,由于a<B,将p1和p2交换。
请注意,a和B并未交换,它们仍保持原值,但p1和p2的值改变了。p1的值原为&a,后来变成&B,p2原值为&B,后来变成&a。这样在输出*p1和*p2时,实际上是输出变量B和a的值,所以先输出9,然后输出5。
这个问题的算法是不交换整型变量的值,而是交换两个指针变量的值(即a和B的地址)。
main()
{
int*p1,*p2,*p,a,B;
scanf("%D,%D",&a,&B);
p1=&a;p2=&B;
if(a<B)
{p=p1;p1=p2;p2=p;}
printf("\na=%D,B=%D\n\n",a,B);
printf("max=%D,min=%D\n",*p1,*p2);
}
运行情况如下:
5,9
a=5,B=9
max=9,min=5
当输入a=5,B=9时,由于a<B,将p1和p2交换。
请注意,a和B并未交换,它们仍保持原值,但p1和p2的值改变了。p1的值原为&a,后来变成&B,p2原值为&B,后来变成&a。这样在输出*p1和*p2时,实际上是输出变量B和a的值,所以先输出9,然后输出5。
这个问题的算法是不交换整型变量的值,而是交换两个指针变量的值(即a和B的地址)。