天天看點

c語言之利用指針對3個整數排序

問題:輸入a,b,c 3個整數,按大小順序輸出

1 #include<stdio.h>        
 2 int main()
 3 {
 4     int a,b,c;                  //定義三個變量
 5     int *p1,*p2,*p3;       //定義三個指針
 6     scanf("%d %d %d",&a,&b,&c);    //輸入三個數值
 7     p1=&a,p2=&b,p3=&c;        //把a,b,c三個數的位址指派給對應指針
 8     exchange(p1,p2,p3);         //調用函數
 9     printf("%d,%d,%d\n",a,b,c); //将調換後的值順序輸出
10     return 0;
11 
12 }
13 void exchange(int *p1,int *p2,int *p3)
14 {
15     if(*p1<*p2)         //如果p1指針指向的數小于p2,則交換指針指向值
16         swap(p1,p2);
17     if(*p1<*p3)          //同上
18          swap(p1,p3);
19     if(*p2<*p3)         //同上
20         swap(p2,p3);
21 
22 }
23 void swap(int *pt1,int *pt2)  //交換指針指向值
24 {
25     int temp;
26     temp=*pt1;
27     *pt1=*pt2;
28     *pt2=temp;
29 }      

注意:函數exchange中指針p1,p2,p3中的數值是不會變的,在調用函數swap後,指針p1,p2,p3數值也不會改變,唯一改變的是指針指向對應記憶體單元的值,也就是a,b,c的值。

在經過以上函數調用後,a,b,c依次從大到小排序。