#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
使用引用传递效率或许更高而且可读性强。传地址动不动就将指针和解引用混淆咯