C++错误,代码如下,求解答

#include<stdio.h>
void fun(int *a,int *b,int *c,int *max,int *min)
{*max=*a;
 *min=*b;
     if(*max<*b)*max=*b;
else if(*min>*b)*min=*b;
     if(*max<*c)*max=*c;
else if(*min>*c)*min=*c;
}

int main()
{int a,b,c;
printf("请输入a,b,c三个数的值:");
scanf("%d%d%d",&a,&b,&c);
int max,min;
fun(&a,&b,&c,&max,&min);
printf("max=%d min=%d\n",max,min);
return 0;
}
 

我输入1 2 3 ,得到得最大值3是正确的,最小值是2是错误的。原因是*min=*b;后面最小值逻辑里一直没有与*a比较,应该改为*min=*a;

 

另外a, b c三个数传值就可以了,没必要传地址。

 


#include<stdio.h>

void fun(int a, int b, int c, int *max, int *min)
{
    *max = a;
    *min = a;
    
    if (*max < b)
        *max = b;
    else if (*min > b)
        *min = b;
    
    if (*max < c)
        *max = c;
    else if (*min > c)
        *min = c;
}

int main()
{
    int a, b, c;
    int max, min;
    
    printf("请输入a,b,c三个数的值: ");
    scanf("%d%d%d", &a, &b, &c);
    
    fun(a, b, c, &max, &min);
    
    printf("max = %d, min = %d\n", max, min);
    return 0;
}

// Output:
请输入a,b,c三个数的值: 1 2 3
max = 3, min = 1

请输入a,b,c三个数的值: 9 8 7
max = 9, min = 7

请输入a,b,c三个数的值: 5 4 6
max = 6, min = 4

 

使用引用传递效率或许更高而且可读性强。传地址动不动就将指针和解引用混淆咯