有关问题请问.

问题请教..??
#include   "stdio.h "
main()
{int   a,b,c,i   ;
int   *p,*q,*s   ,*tmp;
   
        p=&a;q=&b;s=&c;  
            printf( "please   input   three   int   nums:\t ");
                                    scanf( "%d,%d,%d ",&a,&b,&c);
    if(*p> *q)  
          {tmp=p;p=q;q=tmp;}
    if(*p> *s)  
              {tmp=p;p=s;s=tmp;}
    if   (*q   >   *s)
              {tmp=q;   q=s;s=tmp;}    
             
    printf( "%d,%d,%d ",*p,*q,*s);
}  
 
/*if(*p> *q)  
          {tmp=p;p=q;q=tmp;}
  else   if(*p> *s)  
              {tmp=p;p=s;s=tmp;}
    else   if   (*q   >   *s)
              {tmp=q;   q=s;s=tmp;}   */
问题1:     判断语句的时候为什么不是使用else   if呢?怎么都是if   呀?


此外还有个小疑惑,就是在一个帖子上看了交换两指针的地址不能实现它所指向的数据的相互交换,这个程序这样写可以实现交换,请问是为什么呀?  
请高手指点```




------解决方案--------------------
因为*p除了要和*q比较外还要和*s比较呀,然后*q也要和*s比较,这样才能排好序嘛
如果你都用else if的话,那三个比较只要有一个比较为真的话,后面的比较就不会执行了

只交换指针的值,对它们所指的内容是不会有改变的。这里是交换指针所指的值
------解决方案--------------------
如果用else if
只能在这些条件中符合一个,即条件是平等的

但是这个是进行多种检查,所以不用else if