#include <stdio.h> main() { void swap(int *,int *,int *);//函数原型 int a,b,c; int *p1,*p2,*p3; p1=&a;//不可错写成p1=a,p2=b,p3=c, 因为仅有数组名(包括字符数组/整型数组/指针数组等)才代表地址 p2=&b; p3=&c; printf("Enter 3 integers:"); scanf("%d%d%d",&a,&b,&c); swap(p1,p2,p3); printf("small to big: %d, %d, %d/n",a,b,c); } void swap(int *p1,int *p2,int *p3) { int temp,*tmp; static int i=3; if(i--) { if(*p1>*p2) { temp=*p1; *p1=*p2; *p2=temp; } if (i==2) {tmp=p2;p2=p3;p3=tmp;} if (i==1) {tmp=p1;p1=p3;p3=tmp;} swap(p1,p2,p3);//递归调用(函数自己调用自己) } }