交换数哪里错了,帮我看看

设计完整的程序实现以下功能:从键盘上输入3个整数,通过指针运算,找出3个数中的最大值与最小值和它们的地址,并实现最大值与最小值的交换(要求用指针作为函数参数处理)。代码如下:
#include <stdio.h>void Max(int a[], int *max, int *min, int *p1, int *p2);int huan(int a[], int *p1, int *p2);int main () { int a[3] = {0}; scanf("%d%d%d", &a[0], &a[1], &a[2]); int max, min; int p1, p2; Max(a, &max, &min, &p1, &p2); printf("输入的三个数是%d,%d,%d\n", a[0], a[1], a[2]); printf("最大数是%d,最小数是%d\n", max, min); huan(a, &p1, &p2); printf("交换后的三个数是%d,%d,%d", a[0], a[1], a[2]); return 0;}void Max(int a[], int *max, int *min, int *p1, int *p2) { *min = *max = a[0]; int i, b, c; i = 0; while (i < 3) { if (*max < a[i]) { *max = a[i]; b = i; *p1 = b; } if (*min > a[i]) { *min = a[i]; c = i; *p2 = c; } i++; }}int huan(int a[], int *p1, int *p2) { int temp; temp = a[*p1]; a[*p1] = a[*p2]; a[*p2] = temp;}

程序修改如下所示,有问题私聊哈~

#include <stdio.h>

void Max(int *a, int *max, int *min, int *p1, int *p2);
int huan(int *a, int p1, int p2);
int main () 
{ 
    int a[3] = {0}; 
    scanf("%d%d%d", &a[0], &a[1], &a[2]); 
    int max, min; 
    int p1=0, p2=0; 
    Max(a, &max, &min, &p1, &p2); 
    printf("输入的三个数是%d,%d,%d\n", a[0], a[1], a[2]); 
    printf("最大数是%d,最小数是%d\n", max, min); 
    printf("最大数下标%d,最小数的下标是%d\n", p1, p2);
    huan(a, p1, p2); 
    printf("交换后的三个数是%d,%d,%d", a[0], a[1], a[2]); 
    return 0;
}
void Max(int *a, int *max, int *min, int *p1, int *p2) 
{ 
    *min = a[0];
    *max = a[0]; 
    int i, b=0, c=0; 
    i = 0; 
    while (i < 3) 
    { 
        if (*max < a[i]) 
        { 
            *max = a[i]; 
            b = i; 
            *p1 = b; 
        } 
        if (*min > a[i]) 
        { 
            *min = a[i]; 
            c = i; 
            *p2 = c; 
        } 
        i++; 
    }
}
int huan(int *a, int p1, int p2) 
{ 
    int temp; 
    temp = a[p1]; 
    a[p1] = a[p2]; 
    a[p2] = temp;
}