图6.7
例6.2 输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)。
解此题的思路是: 设两个指针变量p1和p2,使它们分别指向a和b。使p1指向a和b中的大者,p2指向小者,顺序输出*p1,*p2就实现了按先大后小的顺序输出a和b。按此思路编写程序如下:
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,*p,a,b;
cin>>a>>b; //输入两个整数
p1=&a; //使p1指向a
p2=&b; //使p2指向b
if(a<b) //如果a<b就使p1与p2的值交换
{p=p1;p1=p2;p2=p;} //将p1的指向与p2的指向交换
cout<<″a=″<<a<<″ b=″<<b<<endl;
cout<<″max=″<<*p1<<″ min=″<<*p2<<endl;
return 0;
}
运行情况如下:
4578↙
a=45 b=78
max=78 min=45
输入a的值45,b的值78,由于a<b,将p1的值和p2的值交换,即将p1的指向与p2的指向交换。交换前的情况见图6.8(a),交换后的情况见图6.8(b)。

请注意,这个问题的算法是不交换整型变量的值,而是交换两个指针变量的值。
评论