//【程序37】
//题目:输入3个数a,b,c,按大小顺序输出。(利用指针方法)
#include<stdio.h>
void swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main()
{
int a,b,c;
int *pa,*pb,*pc;
scanf("%d%d%d",&a,&b,&c);
pa=&a;
pb=&b;
pc=&c;
if(a>b)
swap(pa,pb);
if(a>c)
swap(pa,pc);
if(b>c)
swap(pb,pc);
printf("%d %d %d",a,b,c);
return 0;
}
注意典型错误:
void swap(int *p1,int *p2)
{
int *tmp;
*tmp=*p1; //错误!
*p1=*p2;
*p2=*tmp;
}
错因:
例如:调用swap(pa,pb);
*p1就是a,是整型变量,而 *tmp 是 指针变量tmp 所指向的 变量。但tmp中并无确定的值(它的值是不可预见的),因此tmp所指向的单元也是不可预见的。所以,对 *tmp赋值有可能给一个存储着重要数据的存储单元赋值,这样就会破坏系统的正常工作状态。
所以,应将 *p1赋值给一个整型变量tmp. 用整型变量作为临时变量实现 *p1 和 *p2 的交换。